フィルターのクリア

Is it possible to extract all fields from a structure automatically?

250 ビュー (過去 30 日間)
Mr M.
Mr M. 2016 年 8 月 10 日
コメント済み: Ludmila Kuncheva 2021 年 8 月 24 日
I have data in the form: mydata.x = 100; mydata.s = 'abc'; mydata.Y = [1 2 3]; And I want variables x = 100; s = 'abc'; Y = [1 2 3]; How to extract variables automatically? (suppose that I don't know the names of the variables!)
  7 件のコメント
Mr M.
Mr M. 2016 年 8 月 10 日
Why anybody think that this is a dynamic variable in my example? I think this is simple loading problem and not dynamic variable.
Stephen23
Stephen23 2019 年 11 月 14 日
編集済み: Stephen23 2019 年 11 月 14 日

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

採用された回答

Stephen23
Stephen23 2016 年 8 月 11 日
編集済み: Stephen23 2016 年 8 月 11 日
You seem intent on magically making variables pop into existence in the workspace, so here is probably the least-worst way of doing that. The trick is to change the save command by adding the '-struct' option:
>> S.name = 'anna';
>> S.data = 1:3;
>> save('temp.mat','-struct','S')
and then load it like this:
>> clear
>> load('temp.mat')
>> name
name = anna
>> data
data =
1 2 3
and you will find all of those variables in your workspace.

その他の回答 (2 件)

Baium
Baium 2019 年 11 月 14 日
編集済み: Baium 2019 年 11 月 14 日
Alternative, maybe this is more desired than dictating how the struct will be saved in the workspace (this will recursively unpack any struct within the struct):
function unpackStruct (structure)
fn = fieldnames(structure);
for i = 1:numel(fn)
fni = string(fn(i));
field = structure.(fni);
if (isstruct(field))
unpackStruct(field);
continue;
end
assignin('base', fni, field);
end
end
  6 件のコメント
Alec Jacobson
Alec Jacobson 2021 年 5 月 9 日
Or as a single anonymous function (which you can drop into your ide)
unpackStruct = @(s) cellfun(@(name) assignin('base',name,getfield(s,name)),fieldnames(s));
Ludmila Kuncheva
Ludmila Kuncheva 2021 年 8 月 24 日
Thank you, Alec! Very useful.

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


Azzi Abdelmalek
Azzi Abdelmalek 2016 年 8 月 10 日
編集済み: Azzi Abdelmalek 2016 年 8 月 10 日
Use fieldnames function
mydata.x = 100;
mydata.s = 'abc';
mydata.Y = [1 2 3];
field=fieldnames(mydata)
Then you want to assign to each variable individually a corresponding value, which is not recommended. Read this http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop.3F

カテゴリ

Help Center および File ExchangeStructures についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by