MATLAB Answers

Rita
0

How to use dir in a loop to be dynamic?

Asked by Rita
on 20 Aug 2015
Latest activity Commented on by Cedric Wannaz
on 20 Aug 2015
Hi, Sorry for a simple question. I have abc1_0.765mat ......abc50_0.7462mat How I can call the dir in a loop.
for i=1:50
A = dir('abc1*.mat');% but it also calls abc11 and I just need abc1
end
I tried A=dir(fullfile... % but I got error
Any Suggestion

  0 Comments

Sign in to comment.

Tags

1 Answer

Answer by Cedric Wannaz
on 20 Aug 2015
 Accepted Answer

We actually use DIR the other way around. If file names are very regular and determined by e.g. a number, we built them using SPRINTF:
for fId = 1 : 50
filename = sprintf( 'data_%02d.mat', fId ) ;
... do something ...
end
This generates names data_01.mat, data_02.mat, etc, over successive iterations. When we don't know file names, we get a directory listing using wildcards if we know a pattern, e.g.
listing = dir( 'abc*.mat' ) ;
Calling DIR once only, we get listing as a struct array whose entries contain references to all relevant files. Then we iterate over these entries:
for fId = 1 : numel( listing )
filename = listing(fId).name ;
... do something ...
end
Finally, we use FULLFILE when we need to concatenate elements of path, e.g. a folder name and a file name:
folder = 'MyData' ;
listing = dir( fullfile( folder, 'abc*.mat' )) ;
for fId = 1 : numel( listing )
fileLocator = fullfile( folder, listing(fId).name ) ;
... do something ...
end

  4 Comments

Show 1 older comment
Ok, then you could go for something along the following line:
% - Iterate through groups 1 to 50.
for groupId = 1 : 50
% - Get dir listing for 'abc1_*.mat', 'abc2_*.mat', ..,
% where 1, 2, .. is the group ID.
pattern = sprintf( 'abc%d_*.mat', groupId ) ;
listing = dir( pattern ) ;
% - Iterate through files of the current group.
for fileId = 1 : numel( listing )
filename = listing(fileId).name ;
% - Load MAT File and ..
loaded = load( filename ) ;
... do something ...
end
end
Rita
on 20 Aug 2015
Thank you so much or your great help.
My pleasure.

Sign in to comment.