Is it possible to extract all fields from a structure automatically?
255 次查看(过去 30 天)
显示 更早的评论
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 个评论
Stephen23
2019-11-14
编辑:Stephen23
2019-11-14
"Why anybody think that this is a dynamic variable in my example?"
Because that is exactly what load does, when called without an output argument: it dynamically creates all of the loaded variables in the caller workspace:
https://www.mathworks.com/matlabcentral/answers/335253-mat-files-not-loading-correctly#answer_262994
And of course:
采纳的回答
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')
>> clear
>> load('temp.mat')
>> name
name = anna
>> data
data =
1 2 3
and you will find all of those variables in your workspace.
0 个评论
更多回答(3 个)
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
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));
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
0 个评论
Vibin Jacob
2024-11-15,11:02
编辑:Vibin Jacob
2024-11-15,11:03
who / whos function when called without any argument, lists all the variables in the current workspace with their properties.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Performance and Memory 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!