跳过非矩形矩阵中的标题

时间:2016-11-19 16:25:56

标签: matlab file matrix import

我有连续的.dat文件,我想通过垂直连接文件来读取并输入到单个矩阵中。到目前为止,我所使用的代码适用于只有标签作为分隔符的简单数字文件。

 import=[];
 data=[];
 for i = 1:32
    data1=[import dlmread(sprintf('%d.dat',i))];
    data=vertcat(data, data1); 
    clear data1;
 end

我将正确的输出带入数据矩阵。但我的文件格式如下:

                              first    second      third 

 0 11/15 08:57:42.000         54         67         82
 1 11/15 09:48:47.010         49         32         31
 ...

正如你所看到我有三个分隔符(:\ t /)和标题只在最后三列中基本上是我想要阅读的那些,那就是我想要一个矩阵:

 54         67         82
 49         32         31
 ...

我尝试将分隔符指定为dlmwrite以及要跳过多少行/列但是sprintf中出现错误(' delimiter = sprintf(delimiter);%Interpret \ t(如果需要)') 。有没有人知道如何去做?

更新:

我设法进一步了解

 data=[];
 for i = 1:32
     filename = sprintf( '%d.dat',i );
     data1=importdata(filename);%creates a cell array
     data2=cell2mat(data1(3:end,:));%converts it to char
     %The data, without the header, start from the 3rd row.
     data=vertcat(data, data2); %concatenate vertically all the files     
     clear data1; clear data2;
  end
 %the data
 a1=str2num(data(1:end,20:25));%the first data column is in char 20-25
 a2=str2num(data(1:end,30:35));%the second data column is in char 30-35

事情是,最后一部分需要花费太多时间,超过一个小时已经过去,直到我手动停止它。有没有人知道更简单,更快捷的方法呢?

1 个答案:

答案 0 :(得分:0)

我自己设法解决了这个问题,所以我将它发布在这里以供将来参考:

 for i = 1:32
    filename = sprintf( '%d.dat',i );
    data1 = dlmread(filename,'',2,3);%start from row 2, headercolumn 3
    data=vertcat(data, data1);   
    clear data1; 
 end

现在,数据矩阵仅包含我的数据列,并在几秒钟内运行。