How to iterate through the struct char to label a new struct correctly?
Show older comments
I know that when I create a structure, e.g.
fruits(1).apples = data1;
fruits(1).bananas = data2;
I obtain a structure with two fields, and each fields having their respective data1 and data2. What I am attempting to do is loosely based on this.
The same way that above I have labelled my fields "apples" and "bananas", I have a 9x1 field with the names of what I shall label my data fields (shown in the code below).
% List of all the desired files in the folder
%the names of my files are: sample_1, sample_10, sample_13, etc.
filePattern = fullfile(myFolder, 'sample*.mat'); %search for files
theFiles = dir(filePattern);
theFiles = natsortfiles(theFiles); %arrange the files names in numerical order
%the data is a 1x30 structure
for x = 1 : length(theFiles)
baseFileName = theFiles(x).name; %e.g. for x =1 , baseFileName = 'sample_1.mat'
data(1).baseFileName =nk('ref_K15rapidscan.mat','base_K15rapidscan.mat',baseFileName);
end
%nk is a function to process data and to give other data back. The data resulting from this is a 1x30 struct with 2 fields
The problem is that I cannot simply write "data(1).baseFileName", as MATLAB doesn't recognise that baseFileName is a different char each time on the last line
data(1).baseFileName =nk('ref_K15rapidscan.mat','base_K15rapidscan.mat',baseFileName);
How can I end up with something like the image below?

(The image might make it look like I actually got it to work, but really I just changed the name of the fields (apple, pear banana, etc) by hand to sample_1, etc.
2 Comments
Image Analyst
on 22 Feb 2023
What is this nk function or array you're using???
Goncalo Costa
on 22 Feb 2023
Accepted Answer
More Answers (2)
Oguz Kaan Hancioglu
on 22 Feb 2023
0 votes
You can use eval function to use char arrays or strings as a matlab command.
data(1).baseFileName =nk('ref_K15rapidscan.mat','base_K15rapidscan.mat',eval(baseFileName));
1 Comment
Goncalo Costa
on 22 Feb 2023
Voss
on 22 Feb 2023
for x = 1 : length(theFiles)
baseFileName = theFiles(x).name; %e.g. for x =1 , baseFileName = 'sample_1.mat'
[~,fn,~] = fileparts(baseFileName);
data(1).(fn) = nk('ref_K15rapidscan.mat','base_K15rapidscan.mat',baseFileName);
end
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!