将数据从Cell Array复制到Structures数组中

时间:2013-06-17 18:28:29

标签: matlab structure cell-array

我正在尝试从文本文件中读取一行。这一行将使用textscan分解为单词。 textscan的输出将存储在结构数组中。每个结构存储一个单词及其在文本文件中的位置。

例如,文本文件可能如下所示:

Result Time Margin Temperature

我想要一系列结构:

headerRow(1).header = Result
headerRow(1).location = 1  
headerRow(2).header = Time    
headerRow(2).location = 2

等等。这是我的代码:

headerRow = struct( 'header', 'location' );
headerLine = fgets(currentFile)
temp_cellArray = textscan(headerLine, '%s', ' ')
for i = 1:size(temp_cellArray),
    headerRow(i).header = temp_cellArray{i,1}
    headerRow(i).location = i
end

但是这只将整个4x1单元存储到数组的第一个元素中。 如何使代码按照我的意愿工作?

2 个答案:

答案 0 :(得分:1)

temp_cellArray = textscan(headerLine, '%s', ' ')行返回一个单元格数组的单元格数组。您需要获取单元格数组的第一个元素,然后获得您所拥有的数据。

在:

temp_cellArray = 

    {4x1 cell}

修改后的代码:

temp_cellArray = temp_cellArray{1};
for ii=1:length(temp_cellArray)
  headerRow(ii).header = temp_cellArray{ii};
  headerRow(ii).location = ii;
end

后:

temp_cellArray = 

    'Result'
    'Time'
    'Margin'
    'Temperature'


>> headerRow(:).header

ans =

Result


ans =

Time


ans =

Margin


ans =

Temperature

>> headerRow(:).location

ans =

     1


ans =

     2


ans =

     3


ans =

     4

答案 1 :(得分:1)

我认为最好一次使用textscan然后使用cell2struct阅读整个文件,但除非您分享有关输入文件确切结构的更多详细信息,否则我无法提出任何建议。至于您的解决方案,以下修复如何:

headerLine = fgets(currentFile);
H = textscan(headerLine, '%s', ' ');                              %// Headers
L = num2cell(1:numel(H);                                          %// Locations
headerRow = cell2struct([H(:), L(:)], {'header', 'location'}, 2);