2013-02-25 85 views
1

我有一些文本文件(1.txt,2.txt,...,60.txt),并且它们都有5行标题。我使用以下代码,但无法识别标题并导入所有数据。我怎么能说matlab从一个特定的行开始导入?在matlab中加载文本数据

num_txt=60; 
input_dir='C:\data'; 

filenames=dir(fullfile(input_dir,'*.txt')); 
i=1; 
for n=1:num_txt  
    filename=fullfile(input_dir, filenames(n).name); 
    img=importdata(filename);  
    data(:,i)=img(:); 
    i=i+1; 
end 

回答

2

IMPORTDATA有2个额外的参数:delimiterIn和headerlinesIn。

所以你使用(假设选项卡作为分隔符):

img=importdata(filename,'\t',5); 

我也建议你预分配data矩阵。

请注意,为了您的代码正常工作,请确保所有输入文件具有相同的大小。否则,您将在data(:,n)=img(:);(是的,请使用n而不是i)出错。

对于您可以插入到环上面的两个问题:

if n==1 
    data = zeros(numel(img),num_txt); 
else 
    assert(numel(img)==size(data,1),'sprintf('File %s has different size', filenames(n).name)) 
end 
+0

tnx,但我怎么可以将所有的数据存储在数据(:,i)= img(:);?因为它为每个导入创建一个单独的文件!我希望他们所有的导入数据都在一个矩阵中。 – Sam 2013-02-25 18:57:01

+0

我的编辑后看到您的评论。 'img(:)'将单个文件中的所有数据延伸到一个列向量中。所以你的'数据'矩阵假设包含所有的文件。 – yuk 2013-02-25 19:01:35

+0

其实你需要使用索引'n',而不是'i'。 'data(:,n)= img(:)'。而且你不需要'i = i + 1;'语句。您也可以将所有数据存储到3D数组中:'data(:,:n)= img;'。相应地预先分配。 – yuk 2013-02-25 19:05:56

0

我会建议使用readtext.m发现here,如果你知道的基本知识,你不想花太多的时间如何使用MATLAB读取文本。但如果你正在学习,我建议你自己做。