MATLAB Answers

Best way to loop through multiple subfolders and run either script A or B depending on folder name?

21 views (last 30 days)
Here is my current folder/subfolder set up
Study > Participant (1-24) > Experiment (A) and Experiment (B) > Session (1, 2, and 3)
  1. Folder that contains all participants data for this study
  2. Subfolder participants folder (1-24)
  3. Subfolder with data from experiment A and a subfolder for experiment B
  4. Subfolder for session 1, 2, and 3
I have a code that works at the last level - I can analyze 1 session at a time with a script designed for Experiment 1, and another script that analyzes 1 session for Experiment 2.
However this would be very time consuming to analyze each session 1 at a time.
Therefore, my I am trying to figure out how to make a loop that does the following:
  1. Loops through each participants subfolder
  2. Runs Script 1 in the Experiment A subfolder for each session
  3. Runs Script 2 in the Experiment B subfolder for each session
It's important that Script 1 does not run for Experiment B and vice versa because the data, variable names, etc are different.
Hopefully this, appreciate any help that can be offered


Sign in to comment.

Accepted Answer

Jos (10584)
Jos (10584) on 7 Feb 2019
If you have adopted a logical naming system for the files and directories, something simple like this would do:
for P = 1:24 % loop over participants
Pstr = sprintf('Participant%d',P) ;
for S = 1:3 % loop over sessions
Sstr = sprintf('Session%d', S) ;
fileA = fullfile('Study', Pstr, 'ExpA', Sstr, 'data.mat')
ResultsA (P,S) = MyAnalysisA(fileA) ; % if a single element is returned
% and something similar for B

More Answers (1)

TADA on 6 Feb 2019
Edited: TADA on 6 Feb 2019
path = 'Whatever path your study folder lies in';
folders = split(genpath(path), ';');
matchExpA = cellfun(@any, regexpi(folders, '.*\\experiment \(a\)\\session.*'));
matchExpB = cellfun(@any, regexpi(folders, '.*\\experiment \(b\)\\session.*'));
% analyze experiment A
for sessionCell = folders(matchExpA)'
session = sessionCell{1}; % get the folder path of current session in experiment A
% run script for analyzing experiment A
% analyze experiment B
for sessionCell = folders(matchExpB)'
session = sessionCell{1}; % get the folder path of current session in experiment B
% run script for analyzing experiment B
If you are working on a linux system those regular expressions probably need a small change but thats the general idea


Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by