Is it possible to extract all fields from a structure automatically?
    조회 수: 122 (최근 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
참고 항목
카테고리
				Help Center 및 File Exchange에서 Data Type Identification에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!