0

我正在尝试从文本文件中读取一行。该行将通过使用 分解为单词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 单元格存储到数组的第一个元素中。如何使代码按我的意愿工作?

4

2 回答 2

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
于 2013-06-17T18:46:08.060 回答
1

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

headerLine = fgets(currentFile);
H = textscan(headerLine, '%s', ' ');                              %// Headers
L = num2cell(1:numel(H);                                          %// Locations
headerRow = cell2struct([H(:), L(:)], {'header', 'location'}, 2);
于 2013-06-17T18:48:08.923 回答