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

7 visualizaciones (últimos 30 días)
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.

Respuesta aceptada

Walter Roberson
Walter Roberson el 4 de Dic. de 2019
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 comentarios
Walter Roberson
Walter Roberson el 5 de Dic. de 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 el 5 de Dic. de 2019
Now that is working but the line drawnow ratelimit gives an error as unknown command option.
I am really thankfull for your work.

Iniciar sesión para comentar.

Más respuestas (1)

Akira Agata
Akira Agata el 3 de Dic. de 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);
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 comentarios
Akira Agata
Akira Agata el 3 de Dic. de 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 el 4 de Dic. de 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.

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by