How to load .mat data from another folder?

88 views (last 30 days)
Hey,
I have several mat files located in a folder called "matFile". the script is located in the uperfolder of this matFile folder. I mean Folder1 incluses the script and matFile folder. Using following lines I try to access to the mat files. Each mat file is a 1-by-190 cell array
matpath = 'C\...\matFile';
matfiles = dir(fullfile(matpath ,'*'));
N1 = setdiff({matfiles.name},{'.','..'});
then N1 give me all the data in matFile folder, i.e.,
{'time1.mat'} {'time2.mat'} {'time3.mat'} {'time4.mat'}
{'location1.mat'} {'location2.mat'} {'location3.mat'} {'location4.mat'}
{'space1.mat'} {'space2.mat'} {'space3.mat'} {'space4.mat'}
However, when I call load(N1{1}) I got the error that this file is not in the directory. Any idea? Is there a way that I can load data in a for loop?
Thanks in advance!
  3 Comments
VBBV
VBBV on 17 Aug 2021
%if true
 matpath = 'C\...\matFile\';
matfiles = dir(fullfile(matpath ,'*.mat'));
N1 = setdiff({matfiles.name},{'.','..'});

Also do these changes

Sign in to comment.

Accepted Answer

Kelly Kearney
Kelly Kearney on 17 Aug 2021
The dir command returns the path to each file in the folder field, so you need to append that to recreate the full path names for your files:
N1 = fullfile(matfiles(1).folder, setdiff({matfiles.name},{'.','..'}));
Although in this case, seeing that you're only looking for .mat files, I suggest using a more specific filter and eliminating the setdiff call:
matfiles = dir(fullfile(matpath, '*.mat'));
N1 = fullfile({matfiles.folder}, {matfiles.name});

More Answers (1)

Jeff Miller
Jeff Miller on 17 Aug 2021
You need the folder name at the beginning of the string you pass to load, maybe something like this:
for iFile = 1:numel(N1)
s = [matpath '\' N1{iFile}];
load(s);
end
  2 Comments
Stephen23
Stephen23 on 17 Aug 2021
Edited: Stephen23 on 17 Aug 2021
It is recommended to use FULLFILE:
F = fullfile(matpath,N1{iFile});
and to load into an output variable:
S = load(F);
Susan
Susan on 17 Aug 2021
Edited: Susan on 17 Aug 2021
Thanks for your response.
for iFile = 1:numel(N1)
F = fullfile(matpath,N1{iFile});
S{iFile} = load(F);
end
read through the first mat file to the fifth one and then gives and error that
Error using load
Cannot read file C:\...\matFile\location2.mat.
Any idea? However, I can load ('C:\...\matFile\location2.mat') but when it runs a for loop I get this error. I think its because of running out of memory. I tried "fopen('all')" which replys [].

Sign in to comment.

Categories

Find more on Structures 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!