【问题标题】:skip header in non-rectangular matrix在非矩形矩阵中跳过标题
【发布时间】:2016-11-19 16:25:56
【问题描述】:

我有连续的 .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 (if necessary)')。有谁知道该怎么做?

更新:

我设法走得更远

 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

问题是最后一部分花费了太多时间,一个多小时过去了,直到我手动停止它。有谁知道更简单、更快捷的方法吗?

【问题讨论】:

  • 请提供实际的错误信息。
  • @excaza 我已经在我的原始帖子中做过:''delimiter = sprintf(delimiter); % 解释 \t(如果需要)''
  • 这不是错误信息。
  • @excaza 对不起,这是我得到的错误:使用 sprintf 格式时出错。 dlmread 中的错误(第 71 行)分隔符 = sprintf(分隔符); % 解释 \t(如有必要)

标签: matlab file matrix import


【解决方案1】:

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

 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

现在数据矩阵只包含我的数据列,它会在几秒钟内运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2010-12-28
    • 2014-03-06
    • 2020-12-05
    相关资源
    最近更新 更多