Retrive cell names from structure into a string vector

Hi
I have a structure that contains cell's inside. I would like to retrive the name of the cells into a vector, so I can make a for loop. This data is just for one year, and I have alot, where the dates change, so I cant just write the dates down since they are generated automaticly. The cell array inside each date is the same.
Dates = ['April_24_2018';'May_01_2018';'May_08_2018'... %And so on.]
for h = 1:size(Dates,1)
Data = Input.Dates(h,:){1,2}(1,1);)
end
Can't find a guide to do this, can somebody help :) ?
Best Regards Mikkel
Capture.PNG

3 comentarios

Jan
Jan el 12 de Feb. de 2019
To be exact: You want the names of the fields and not of the cells. Cells do not have names.
Mikkel
Mikkel el 12 de Feb. de 2019
Hi Jan
How do I make a code that can access the Input.April_24_2018{1,3}(1,1) without having to write the April_24_2018 ? I would like to have something like. Input.(1){1,3}(1,1)...
Stephen23
Stephen23 el 12 de Feb. de 2019
Editada: Stephen23 el 12 de Feb. de 2019
@Mikkel: awkwardly forcing meta-data into fieldnames is not likely to make your code very neat or efficient. A non-scalar structure would make it trivially easy to loop over the elements, using basic indexing:
S(1).time = [2019,02,12];
S(1).data = {...};
S(2).time = [2019,02,12];
S(2).data = {...};
...
for k = 1:numel(S)
S(k).time
S(k).data{1}(1)
end

Iniciar sesión para comentar.

 Respuesta aceptada

Adam Danz
Adam Danz el 12 de Feb. de 2019

4 comentarios

Hi
Yeah it gets the names but how can I use that in a for loop?
If I do this:
fields = fieldnames(Input)
It gives me the names into at cell, but i cant:
for h = 1:size(fields,1)
Input.fields{1,h}{1,2}(1,1)
end
I get the error:
Reference to non-existent field 'fields'.
I dont know if im going at it the right way? Is there a better and smarter way?
Input.(fields{1,h}){1,2}(1,1)
% ^ ^ Important parentheses
Alternately if you just want to iterate through the fields in the struct array consider using structfun.
Adam Danz
Adam Danz el 12 de Feb. de 2019
Editada: Adam Danz el 12 de Feb. de 2019
@Mikkel, now that your question has become clearer, you've got some decisions to make.
Using a non-scalar structure would really clean things up (as suggested by Stephen Cobeldick). You could convert your existing data to this format or, if possible, you could change the existing code that generated the structure in the first place.
If you decide not to go that route, two good options are structfun at dynamic field names (as suggested by Jan and Steven Lord. If you're just applying the same function to all fields and all of your fields are organized in the same way, go with structfun(). Otherwise, go with dynamic field names (or a combination of both).
If you get stuck, feel free to follow-up. Providing a sample of data always helps.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 12 de Feb. de 2019

Editada:

el 12 de Feb. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by