Creating a structure from a cell array with nested structure fields

26 vues (au cours des 30 derniers jours)
Lexi Anderson
Lexi Anderson le 15 Mai 2020
Commenté : Stephen23 le 15 Mai 2020
I have a structure with a cell array with structure fields.
The structure is a.fields. where a.fields{1,1} = 'b.c', a.fields{2,1}='c.d'
The real info is longer with even more nested structures, but I need a way that takes those fields to create the actual structure. I am using a for loop to go through the list, and so far I have:
structure_name = a.fields{i;1};
name.structure_name = {some info};
with the final hope that name.b.c = {some info} and so on and so forth.
I considered a loop by separating the cell array strings by period and looping through as well but figured I would ask about the (hopefully) more simple way. Obviously Matlab doesnt like that the names have periods and its telling me that it's invalid.
I would appreciate any insight.

Réponse acceptée

Stephen23
Stephen23 le 15 Mai 2020
Modifié(e) : Stephen23 le 15 Mai 2020
Nope, that won't work.
Best approach: split on the period characters, then use setfield and getfield as appropriate:
S.field1.field2.field3 = 42;
P = 'field1.field2.field3';
pathPieces = split(P, '.');
theAnswer = getfield(S, pathPieces{:})
This example is taken from Steven Lord's answer here:
  2 commentaires
Lexi Anderson
Lexi Anderson le 15 Mai 2020
Modifié(e) : Lexi Anderson le 15 Mai 2020
Ah yeah, my next problem arises that the values for the new structure exist as a nxm matrix in the same inital matrix under a.values, so I get
"Reference to non-existent field, ' structure_name';
Stephen23
Stephen23 le 15 Mai 2020
"...the values for the new structure exist as a nxm matrix in the same inital matrix under a.values"
I see no reason why that should cause you any problem:
...
S = setfield(S, pathPieces{:}, a.values)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Produits


Version

R2012a

Community Treasure Hunt

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

Start Hunting!

Translated by