我正在尝试从文本文件中读取一行。这一行将使用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单元存储到数组的第一个元素中。 如何使代码按照我的意愿工作?
答案 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);