How to iterate through the struct char to label a new struct correctly?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Goncalo Costa
el 22 de Feb. de 2023
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 comentarios
Respuesta aceptada
Goncalo Costa
el 22 de Feb. de 2023
2 comentarios
Stephen23
el 22 de Feb. de 2023
Editada: Stephen23
el 22 de Feb. de 2023
Not that this is fragile data design: there are many characters which are valid in filenames which are not valid in fieldnames. When you get such a character, this code will fail.
For much more robust code which does not duplicate data in extra variables, see the answer I gave you earlier:
Más respuestas (2)
Oguz Kaan Hancioglu
el 22 de Feb. de 2023
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 comentario
Voss
el 22 de Feb. de 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
0 comentarios
Ver también
Categorías
Más información sobre Structures en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!