conversion

i have a struct loaded and one of it's fields contains names such that struct(1).name contains "First" struct(2).name containis "Second" and so on
I would like to use these struct fields as a variable in my code. For example I'd like to set struct(1).name=content of some matrix so instead of saying X=[1;2;3] i'd like to say struct(1).name=[1,2,34] so First=[1,2,34] would be stored in the workspace. I just don't know how i need to convert struct(i).name to be able to use it

1 commentaire

Baba
Baba le 16 Nov 2011
i think i was looking for varname = genvarname(struct(1).name)

Connectez-vous pour commenter.

Réponses (2)

Jan
Jan le 16 Nov 2011

1 vote

Creating variables dynamically is prone to errors, hard to debug and slows down Matlab. Therefore it is recommended to avoid this.
A more efficient approach is using dynamic fieldnames:
data.(struct(1).name) = [1, 2, 34];
data.(struct(2).name) = [1, 2, 34];
Then the new variables are encapsulated in the struct data.
Jonathan
Jonathan le 16 Nov 2011

0 votes

Baba,
This will do what you described.
structVar(1).name = 'First';
structVar(2).name = 'Second';
makeVarFun = @(str, val) assignin('caller', genvarname(str), val);
for i = 1:numel(structVar)
varName = structVar(i).name;
makeVarFun(varName, i);
end

Catégories

Question posée :

le 16 Nov 2011

Community Treasure Hunt

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

Start Hunting!

Translated by