MATLAB: Array from structs in a workspace

array of .mat files from workspace

Good day.
I’m a little bit mixt up with chars, doubles, operands, and so on…
1st. I’m loading a bunch of structs from directory to workspace.
files=dir('C:\...\*.mat');
for i=1:length(files)
load(files(i).name);
end
I want to make from them an array.
array=[name1 name2 ... name118]
This method produces expected outcome – a struct 1×118. The only undesirable thing is to type all the 118 names “manually”.
I trade some “shortcuts”…
array = files;
Produces incorrect array 118×1 with some data about files, not their fields.
array =(files(i).name);
Asks to check for missing argument or incorrect argument data type in call to further function 'struct2cell'.
array =(1:files(i).name);
Error due to colon operator with char operands, first and last operands must be char.
Search in manuals and “ask” section is still in progress. Who – also can't fit, because at that point of the script are additional/not .mat variables (files and i) in workspace.
Maby someone has a hint on how I could avoid typing in “manual”?

Best Answer

projectdir = 'C:\...';
dinfo = dir( fullfile(projectdir, '*.mat') );
filenames = fullfile( {dinfo.folder}, {dinfo.name} );
for i = length(files) : -1 : 1
array(1,i) = load(filenames{i});
end
The backwards loop is for efficiency, as it initializes the struct to full size and so does not need to keep extending the struct like you would if you looped forwards.