2

一部のファイル名を変更するにはどうすればよいか質問があります。問題は、この種のアーカイブがあることです。たとえば、次のようになります。

25614_z.zip
25312_z.zip
25003_z.zip

そして私はそれを作りたい:

lp_25_614.zip
lp_25_312.zip
lp_25_003.zip

だから、私はこのプロセスを自動化する必要があります

lp + 25(最初の2桁)+ 3 4および5の位置の数字)+ドットジップ

それを行う方法はありますか?

編集

たとえば、これは私の状態になります。

XXXX

if fileNames{k}(3:5) >0 <5 (the interval)= 2
fileNames{k}(3:5)> >5 >10 =10

したがって、たとえば:

fileNames {k}(3:5)= 05

条件の後、それは名前変更で=2に置き換えられます

そして、名前変更名に追加したいと思います。

newFileName = ['fiche' fileNames{k} (3) 'pd' fileNames{k}(3:5) 'XXX '.tar.gz']; 

それは可能ですか?

4

2 に答える 2

2

movefileファイルの名前を変更するために使用できます。

 myPath = 'C:\myFolder\'; % path to your files

fileNames = {
    '25614_z.zip'
    '25312_z.zip'
    '25003_z.zip'
    }


for k = 1:length(fileNames)
    newFileName = ['lp_' fileNames{k}(1:2) '_' fileNames{k}(3:5) '.zip'];
    % renaming
    movefile([myPath fileNames{k}], [myPath newFileName]); 
end

~編​​集~ あなたの編集に関して: はい、場合によって異なるファイル名を生成することは可能です。以下の例はかなりぎこちなく、少数の異なるケースしかない場合にのみ使用する必要があることに注意してください。

myPath = 'C:\myFolder\'; % path to your files

fileNames = {
    '25614_z.zip'
    '25312_z.zip'
    '25003_z.zip'
    }


for k = 1:length(fileNames)
    n = num2str(fileNames{k}(3:5));
    if n > 0 && n < 5
        fileName = % put your file name for this case here
    elseif n >= 5 && n < 10
        fileName = % put your file name for this case here
    elseif n >= 10 && n < 20
        fileName = % put your file name for this case here
    end
    % renaming
    movefile([myPath fileNames{k}], [myPath newFileName]);
end
于 2012-10-15T10:00:40.450 に答える
0

より一般的な解決策として、パラメーターを使用regexpTokenて文字列の一部を一致させることができます。

for k = 1:length(fileNames)
    splitname = regexp(fileNames{k}, '(\d\d)(\d\d\d)', 'Tokens');
    fname_new = ['lp_' splitname{1}{1} '_' splitname{1}{2} '.zip'];
    movefile(fileNames{k}, fname_new);
end

ここで、 のパターンregexpは 2 桁の数字とそれに続く 3 桁の数字に一致します。

于 2012-10-15T10:02:11.487 に答える