在matlab中读取多个标题的文本数据

时间:2014-03-24 16:09:45

标签: matlab

我正在尝试在matlab中读取一个文本文件,该文件包含多个测试中存储的数据:

x1 x2 y
1 2 5
2 4 7
3 2 1
...
x1 x2 y
5 6 8
2 9 0
3 6 7
...
x1 x2 y
-1 4 3.5
6.4 3.6 3
3 6 7.4
...

如果我重复多次列标题,我将如何在matlab中阅读?我尝试使用importdata但它只读取第一个标题和与第一个标题相关的数据。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是一个想法,有点笨拙但有效:

创建一个包含行的临时数组:

fid=fopen('YourFile.txt');
Rows = textscan(fid,'%s', 'delimiter','\n');
fclose(fid);

通过检测x字符来查找每个数据集的开头:

DataStarts=strfind(Rows{1,1},'x'); 
DataIdx = find(~cellfun('isempty', DataStarts)); 

现在,您可以使用DataIdx中的索引之间的间隔提取行。

Columns= cellfun(@(x) textscan(x,'%f','delimiter','\t','CollectOutput',1), Rows{1,1});
Columns= cellfun(@transpose, Columns, 'UniformOutput', 0);

for j=1:size(DataIdx)-1
        Data{j}=cell2mat(Columns(DataIdx(j)+1:DataIdx(j+1)-1));
end
Data{j+1}=cell2mat(Columns(DataIdx(size(DataIdx))+1:size(Rows{1,1})));

单个数据集现在存储在单元格数组Data中。

Data = 

    [3x3 double]    [3x3 double]    [3x3 double]