2011-10-22 12 views
0

名前を指定せずに最初のファイルの名前をディレクトリにロードし、各繰り返しでディレクトリ内の次のファイルに移動する方法はありますか?MatLabではループからファイルへの移動方法は?

ファイル名に1,1.5,2,2,3,3.5などの名前が付けられているという問題があります。繰り返しでnum2str(X)を指定してもファイルの検索には役立ちません。

私はstrrep(s1、s2、s3)を使用してそれらの名前を変更しようとしていますが、再びループにロードするのと同じ問題が発生します。

私は最初に計画を立てておくべきだと思いますが、これらのファイルはシミュレーションを再実行するには大きすぎます。

これは、私は、ファイルの名前を変更しなければならないものである:

%%%RENAMING A FILE%%% 

%Search directory to get number of files 
d1=dir('\MATLAB\Data\NumberedQwQoRuns'); 
numfiles = length(d1)-2; 


for a=1:numfiles 
%Search subdirectory if necessary for count of those folders 
d2=dir('\MATLAB\Data\NumberedQwQoRuns\Run'num2str(a)); 
subdir = length(d2)-2; 
for b= 1:subdir 

origname= PROBLEM??? 

Newname=['Zdata' num2str(b) '.txt'] 
Newfile= strrep(origname, origname, newname) 
movefile(origname,Newfile) 

end 
end 

はあなたの助けをありがとうございました、 ABID A

答えて

2

は私のソリューションです:

%# get runs subdirectories 
BASE_DIR = '/path/to/Runs'; 
runsDir = dir(fullfile(BASE_DIR,'Runs')); 
runsDir = {runsDir([runsDir.isdir]).name};   %# keep only directory names 
runsDir = runsDir(~ismember(runsDir, {'.' '..'})); %# ignore "." and ".." 

for r=1:numel(runsDir) 
    %# get files in subdirectory 
    runFiles = dir(fullfile(BASE_DIR,'Runs',runsDir{r},'*.txt')); %# *.txt files 
    runFiles = {runFiles.name};         %# file names 

    %# map filenames: 1,1.5,2,2.5,... into 1,2,3,4,... 
    [~,ord] = sort(str2double(regexprep(runFiles,'\.txt$',''))); 
    newrunFiles = cellstr(num2str(ord(:),'Zdata_%d.txt')); 
    newrunFiles = strtrim(newrunFiles); 

    %# rename files 
    for f=1:numel(runFiles) 
     fname = fullfile(BASE_DIR,'Runs',runsDir{r},runFiles{f}); 
     fnameNew = fullfile(BASE_DIR,'Runs',runsDir{r},newrunFiles{f}); 
     movefile(fname,fnameNew); 
    end 
end 

私は、次のファイル構造にそれをテスト:

Runs/ 
| 
|__Run1/ 
| |__1.txt  will become: Zdata_1.txt 
| |__1.5.txt     Zdata_2.txt 
| |__2.txt      Zdata_3.txt 
| |__2.5.txt     etc... 
| |__3.txt 
| |__3.5.txt 
| 
|__Run2/ 
    |__1.txt 
    |__1.5.txt 
    |__2.txt 
    |__2.5.txt 
    |__3.txt 
    |__3.5.txt 
+0

は、ここで使用する新しいメソッドの多くがありますが、ご協力いただきありがとうございますが、そうその素晴らしいです私はそれらを学ぶことができます。しかし、スクリプトを実行すると、エラーが出ます(??? Error:File:Altrenamefile.m Line:13 Column: 7)。そして、何が間違っているのか分かりません。 式またはステートメントが間違っています - 可能であれば アンバランス({{または – Abid

+0

@Abid: '[〜、ord] = sort(...)演算子](http://blogs.mathworks.com/loren/2009/09/11/matlab-release-2009b-best-new-feature-or/)がMATLAB R2009bで導入されたため、古いバージョンを使用している場合は、 (ダミー、ord =ソート(...)) – Amro

+0

私はパスを正しく理解したり設定していると思います。NumberedQwQoRunsファイルにはRun1、Run2、.... Run9があります。これらのファイルには、名前を変更したい.txtファイルがあります。ありがとう、Abid – Abid

0

はあなたかもしれないことをsubdir(b).name

ノートから実際のファイル名を取得します。合成された名前が既存の名前の1つと一致する場合に問題があります。ここで

関連する問題