【问题标题】:Import matlab with space and tab delimiter导入带有空格和制表符分隔符的 matlab
【发布时间】:2018-10-25 00:21:16
【问题描述】:

我需要将一个 txt 文件导入 Matlab 中,它具有这种格式

text text text           
1           0 1 2 3
            4 5 6 7
2           10 11 15 18
            15 1 18 3

第一列和第二列之间用制表符分隔,其余数据用空格分隔。 我尝试使用以下方法导入它:

g = importdata('file.txt',delimiterIn,headerlinesIn);
delimiterIn = ' ';
headerlinesIn = 1;

然后提取出来的表是这样的:

text text text  
1 0 1 2 3
4 5 6 7 nan
2 10 11 15 18
15 1 18 3 nan

我想要的是一个保持格式的表格,第一列是 g.data,然后是其他所有列。

我想要一个类似的输出矩阵

1 0 1 2 3
  4 5 6 7
2 10 11 15 18
  15 1 18 3

然后如果我需要在第一列中提取由 2 表示的数据,我可以将其放入另一个具有值的矩阵中

10 11 15 18
15 1 18 3

矩阵单元格内的每个数字

我该怎么做?

【问题讨论】:

  • 不确定“g.data 的第一列只有第一列,然后是所有其他列”是什么意思,为什么不给出所需的输出?
  • 完成。我希望第一列(值为 1,2,...)和其余数据对齐。通过这种方式,我可以从第一列中提取我需要识别其余数据的参考。例如:我需要提取由2 表示的数据 -> 我将值10 11 15 18 15 1 18 3 放入另一个矩阵中,矩阵单元格内的每个数字。

标签: matlab file-import


【解决方案1】:

解决方案可能是:

fid = fopen('test.txt');
M = {[]};Midx=1;
l = fgetl(fid); %header
l = fgetl(fid);
while ~isnumeric(l)
    idx = str2double(l(1));
    if ~isnan(idx)
        Midx=idx;
        M{Midx}=[];
        l = l(2:end);
    end
    val = cell2mat(textscan(l,'%f'))';
    M{Midx}=[M{Midx};val];
    l=fgetl(fid);
end
fclose(fid);

【讨论】:

    【解决方案2】:

    也许有点过于务实,但这可能会有所帮助:

    for i=1:size(A,1)
      if isnan(A(i,end))==1
        A(i,2:end) = A(i,1:4);
        A(i,1) = NaN;
      end
    end
    
    for i=1:size(A,1)
      if A(i,1)==2
        B = A(i:i+1,2:end);
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      相关资源
      最近更新 更多