2014-03-24 47 views
1

我想读取已存储的数据从多个测试如下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,但它只读取第一个标题和与第一个标题相关的数据。

感谢您的帮助!

+0

一个选项是使用'xlsread'。 Matlab不是特别擅长以不同格式阅读混合文本和数字文件:一行标题,然后是数字。 –

+0

xlsread不适用于文本文件。我尝试过这个。谢谢! –

+0

对,我忘了提及你需要先用excel将它们转换成.xls文件。繁琐... –

回答

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]