如何从结构中获取所有数据?

时间:2013-02-16 20:00:53

标签: matlab struct

我从Web服务获得了结果,MatLab很高兴地通知它是 1x1 struct 。但是,当我尝试显示它时(通过输入 receivedData 并按输入),我会看到这个:

ResponseData: [5x1 struct]

同样很高兴,我进入以下内容,试图让我看到数据:

struct2array(responseData)

我只得到一堆(不是五个,超过五个)字符串可能是所提供数据列的名称标题。

如何从这种结构中获取所有数据?

5 个答案:

答案 0 :(得分:3)

您可以使用fieldnames从结构中获取数据,然后使用getfield函数迭代显示数据。例如:

structvariable = struct('a',123,'b',456,'c',789);
dataout = zeros(1,length(structvariable)) % Preallocating data for structure
field = fieldnames(a);

for i = 1:length(structvariable)
    getfield(structvariable,field{i})
end

请注意,getfield单元格的形式提供数据,而不是矩阵

答案 1 :(得分:2)

或者您可以使用cellfun函数:

% STRUCT - your structure
% tmp_nam - structure field names
% tmp_val - values for structure field names


tmp_nam = fieldnames(STRUCT);
tmp_val = cellfun(@(x)(STRUCT.(x)),tmp_nam,'UniformOutput',false);

答案 2 :(得分:0)

一些有用的访问语法:

someVar = ResponseData(1)  %Displays the first element
someVar = ResponseData(4)  %Displays the 4th element

全部显示,一个在下一个

之后
for ix = 1:length(ResponseData)
    tmp = ResponseData(ix);
end

获取所有字段名

names = fieldnames(ResponseData)

从结构中获取具有第一个字段名称的所有5个数据元素,并将它们放入单元格数组

ixFieldName = 1;
someCellArray = {  ResponseData.(ixFieldName{1})  }

答案 3 :(得分:0)

对Sahinsu回答的一个小修正:

structvariable = struct('a',123,'b',456,'c',789);
dataout = zeros(1,length(structvariable)) % Preallocating data for structure
field = fieldnames(structvariable);

for i = 1:length(field)
    getfield(structvariable,field{i})
end

答案 4 :(得分:0)

为了显示结构的所有元素和子元素,您可以在此处下载自定义函数: http://www.mathworks.com/matlabcentral/fileexchange/13831-structure-display