How to load .mat data from another folder?

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 Commenti

VBBV
VBBV il 17 Ago 2021
Modificato: VBBV il 17 Ago 2021

Try with

%if true
  load(cell2mat(N1(1)))
%if true
 matpath = 'C\...\matFile\';
matfiles = dir(fullfile(matpath ,'*.mat'));
N1 = setdiff({matfiles.name},{'.','..'});

Also do these changes

Thank you!

Accedi per commentare.

 Risposta accettata

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});

Più risposte (1)

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 Commenti

Stephen23
Stephen23 il 17 Ago 2021
Modificato: Stephen23 il 17 Ago 2021
It is recommended to use FULLFILE:
F = fullfile(matpath,N1{iFile});
and to load into an output variable:
S = load(F);
Susan
Susan il 17 Ago 2021
Modificato: Susan il 17 Ago 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 [].

Accedi per commentare.

Richiesto:

il 16 Ago 2021

Modificato:

il 17 Ago 2021

Community Treasure Hunt

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

Start Hunting!

Translated by