Loading multiple .mat files by using for loop

1 view (last 30 days)
Hello, I am trying to load some .mat files and run some specific commands on. The .mat files are named as the following:
% Data Files
dataset1_1.mat dataset2_1.mat dataset3_1.mat ...and so on
dataset1_2.mat dataset2_2.mat ...and so on
dataset1_3.mat ...and so on
...and so on
I want to first load all the dataset1_*.mat files and then perform some calculations on each of them in order (i.e. perform calculations on dataset1_1.mat, then dataset1_2.mat...and so on).
After completing all of the dataset1_*.mat files, I would like to move onto the next batch of files, dataset2_*.mat, and repeat(i.e. perform calculations on dataset2_1.mat, then dataset2_2.mat...and so on).
Process will continue until the last dataset*_*.mat file.
Here is my code so far
% code
files = dir('dataset*_1.mat');
for i = length(files)
files2 = dir('dataset(i)_*.mat');
for j = 1:length(files2)
a = load(files2(j).name);
%Perform some calculations on dataset
end
end
I am using 2 for loops, not sure where I am going wrong. Thanks for the help!

Accepted Answer

Orion
Orion on 6 Nov 2014
Edited: Orion on 6 Nov 2014
the line
_files = dir('dataset*_1.mat');_
returns dataset1_1, dataset2_1,... not what you want. then
files2 = dir('dataset(i)_*.mat')
will return nothing, because (i) is not interpreted, you're asking for a file exactly named 'dataset(i)_*.mat'.
you should do something like
% number of set (dataset1, dataset2, ...if unknown, figure it out).
NumberOfDataset = 3;
for i = 1:NumberOfDataset
% get allfiles matching the pattern 'dataset(i)_*'
files = dir(sprintf('dataset%d_*.mat',i));
for j = 1:length(files)
fprintf('Current file : %s\n',files(j).name)
a = load(files(j).name);
%Perform some calculations on dataset
end
end
  6 Comments
Guillaume
Guillaume on 6 Nov 2014
Personally, I would extract the numbers from the file names, sort them, and iterate over these real numbers rather than a count of them. This way you would avoid (or detect) problems when a file is missing.
Tasadduq
Tasadduq on 6 Nov 2014
Thank you both. Yes, extracting the numbers from the file names and sorting & iterating is a great idea.

Sign in to comment.

More Answers (0)

Categories

Find more on Marine and Underwater Vehicles in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!