Loop through sub folders.

2 views (last 30 days)
AUWAL ABUBAKAR
AUWAL ABUBAKAR on 30 Jan 2020
Commented: AUWAL ABUBAKAR on 30 Jan 2020
Good day all,
I have 25 subfolder each contains some text files. I developed a loop that runs through the text files in a sub folder, extract some vaules from each text file and perform some calculations. Is there any way i can modify my code to run through all the the sub folders at the same time? I want the loop to execute my script (see the script below) for each sub folder and save the results ('Displacement') before proceeding to the next subfolder. So i am expeting to have Displacement1, Displacement2, ..Displacement25 as the final outcome.
x = []; y = []; z = [];
files = dir('*.xvi');
for k = 1:length(files);
fid = fopen(files(k).name,'r');
while ~feof(fid)
st = fgetl(fid);
if ~isempty(strfind(st,'CouchShiftLat'))
stread = textscan(st,'%s %f','Delimiter',';=');
x = [x; stread{2}(1)];
elseif ~isempty(strfind(st,'CouchShiftLong'))
stread = textscan(st,'%s %f','Delimiter',';=');
y = [y; stread{2}(1)];
elseif ~isempty(strfind(st,'CouchShiftHeight'))
stread = textscan(st,'%s %f','Delimiter',';=');
z = [z; stread{2}(1)];
end
end
fclose(fid);
end
Displacement=[x,y,z];

Accepted Answer

Mohammad Sami
Mohammad Sami on 30 Jan 2020
Edited: Mohammad Sami on 30 Jan 2020
mainfolder = uigetdir;
subfolders = dir(mainfolder);
subfolders = subfolders([subfolders.isdir] & ~startsWith({subfolders.name},'.'));
for i = 1:length(subfolders)
x = []; y = []; z = [];
files = dir(fullfile(mainfolder,subfolders(i).name,'*.xvi'));
for k = 1:length(files);
fid = fopen(files(k).name,'r');
while ~feof(fid)
st = fgetl(fid);
if ~isempty(strfind(st,'CouchShiftLat'))
stread = textscan(st,'%s %f','Delimiter',';=');
x = [x; stread{2}(1)];
elseif ~isempty(strfind(st,'CouchShiftLong'))
stread = textscan(st,'%s %f','Delimiter',';=');
y = [y; stread{2}(1)];
elseif ~isempty(strfind(st,'CouchShiftHeight'))
stread = textscan(st,'%s %f','Delimiter',';=');
z = [z; stread{2}(1)];
end
end
fclose(fid);
end
Displacement=[x,y,z];
% save here
end
  5 Comments
Mohammad Sami
Mohammad Sami on 30 Jan 2020
yes, put this inside the subfolder loop.
Displacement=[x,y,z];
matfile = fullfile(mainfolder,subfolders(i).name,'output.mat');
save(matfile,'Displacement')
AUWAL ABUBAKAR
AUWAL ABUBAKAR on 30 Jan 2020
Thanks a million. it woked perfectly.
Wasssalam

Sign in to comment.

More Answers (0)

Categories

Find more on Data Import and Export in Help Center and File Exchange

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!