Loop through sub folders.
    4 views (last 30 days)
  
       Show older comments
    
    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];    
0 Comments
Accepted Answer
  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
      
 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')
More Answers (0)
See Also
Categories
				Find more on Spreadsheets in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
