conversion

1 ビュー (過去 30 日間)
Baba
Baba 2011 年 11 月 16 日
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 件のコメント
Baba
Baba 2011 年 11 月 16 日
i think i was looking for varname = genvarname(struct(1).name)

サインインしてコメントする。

回答 (2 件)

Jan
Jan 2011 年 11 月 16 日
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.
  1 件のコメント
Jonathan
Jonathan 2011 年 11 月 16 日
I agree.

サインインしてコメントする。


Jonathan
Jonathan 2011 年 11 月 16 日
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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by