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

10 次查看(过去 30 天)
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:
C:\Users\I2d1_4_1_1\
y3.mat
y4.mat
y5.mat
C:\Users\I5d1_4_1_1\
y3.mat
y4.mat
y5.mat
y6.mat
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')
end
end
end
end
Thanks for your help.

采纳的回答

Walter Roberson
Walter Roberson 2019-12-4
projectdir = 'C:\Users';
foldinfo = dir( fullfile(projectdir, 'I*') );
foldinfo(~[foldinfo.isdir]) = []; %get rid of I* that are not folders
foldnames = fullfile(projectdir, {foldinfo.name});
numfold = length(foldnames);
for didx = 1 : numfold
thisfold = foldnames{didx};
dinfo = dir(fullfile(thisfold, 'y*.mat'));
filenames = fullfile(thisfold, {dinfo.name});
numfiles = length(filenames);
for fidx = 1 : numfiles
thisfile = filenames{fidx};
datastruct = load(thisfile);
x = datastruct.x; y = datastruct.y;
and do your thing
end
end
  5 个评论
Walter Roberson
Walter Roberson 2019-12-5
[~, 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 2019-12-5
Now that is working but the line drawnow ratelimit gives an error as unknown command option.
I am really thankfull for your work.

请先登录,再进行评论。

更多回答(1 个)

Akira Agata
Akira Agata 2019-12-3
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);
load(filePath);
h = figure;
plotregression(x,y);
saveName = replace(fileList(kk).name,'.mat','.pdf');
saveas(h,fullfile(fileList(kk).folder,saveName));
close(h);
end
  6 个评论
Akira Agata
Akira Agata 2019-12-3
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 2019-12-4
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.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Environment and Settings 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by