MATLAB Answers

How can i load .mat files from subfolders with for loop?

35 views (last 30 days)
I have a different number of .mat files in several folders, which I would like to import, plot data und save it in the same folder as a pdf file.
Here an example with two folders:
My two questions are:
  1. How do i save it in the same folder without changing the directory.
  2. How to adapt the code that i dont need to change the for loop i=3:5 for the first folder and i=3:6 for the second folder.
DataPath ='C:\Users\';
for i=3:60
for input=[2 5 8]
for delay=[4 8 12];
for delayinput=[1 4 8];
load([DataPath 'I%dd1_%d_1_%d\y' num2str(i) '.mat',input,delay,delayinput])
figure(1), plotregression(x, y);
SaveName = sprintf('NN_%d_1_%d',i,delay);
saveas(figure(1),fullfile(DataPath 'I%dd1_%d_1_%d', SaveName),'pdf')
Thanks for your help.


Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 4 Dec 2019
projectdir = 'C:\Users';
foldinfo = dir( fullfile(projectdir, 'I*') );
foldinfo(~[foldinfo.isdir]) = []; %get rid of I* that are not folders
foldnames = fullfile(projectdir, {});
numfold = length(foldnames);
for didx = 1 : numfold
thisfold = foldnames{didx};
dinfo = dir(fullfile(thisfold, 'y*.mat'));
filenames = fullfile(thisfold, {});
numfiles = length(filenames);
for fidx = 1 : numfiles
thisfile = filenames{fidx};
datastruct = load(thisfile);
x = datastruct.x; y = datastruct.y;
and do your thing


Show 2 older comments
Josef Bubendorfer
Josef Bubendorfer on 4 Dec 2019
Thank you. But the following line is producing an error.
[~, fold_name_only] = basename(thisfold);
Undefined function 'basename' for input arguments of type 'char'.
I am using Matlab 2014a. Maybe because of that?
Walter Roberson
Walter Roberson on 5 Dec 2019
[~, fold_name_only] = fileparts(thisfold);
It was a mistake on my part. Too many years of working with too many languages.
Josef Bubendorfer
Josef Bubendorfer on 5 Dec 2019
Now that is working but the line drawnow ratelimit gives an error as unknown command option.
I am really thankfull for your work.

Sign in to comment.

More Answers (1)

Akira Agata
Akira Agata on 3 Dec 2019
How about using dir function?
Using the function, the solution would be like this:
fileList = dir('C:\Users\**\*.mat');
for kk = 1:numel(fileList)
filePath = fullfile(fileList(kk).folder,fileList(kk).name);
h = figure;
saveName = replace(fileList(kk).name,'.mat','.pdf');


Show 3 older comments
Josef Bubendorfer
Josef Bubendorfer on 3 Dec 2019
Thanks for your help. I am usind Matlab 2014a and there the dir funktion this way is not working I think. Sry for the inaccurate question again.
Akira Agata
Akira Agata on 3 Dec 2019
Then, you should change the first line to:
fileList = dir('C:\Users\I2d1_4_1_1\*.mat');
and change the fileList(kk).folder to 'C:\Users\I2d1_4_1_1\'.
Then, please do the same thing to the other folder C:\Users\I5d1_4_1_1\.
Josef Bubendorfer
Josef Bubendorfer on 4 Dec 2019
OK, thanks. Thats what i more or less already do, but if there is no "automatical" way to do it I have to go on like this. But thanks for the help and your ideas.

Sign in to comment.

Sign in to answer this question.