【问题标题】:Importing text files with comments in MATLAB在 MATLAB 中导入带有注释的文本文件
【发布时间】:2010-12-26 12:08:32
【问题描述】:

从文本文件导入数据时,MATLAB 是否将任何字符或字符组合解释为 cmets?当它在一行的开头检测到它时,会知道所有的行都被忽略了吗?

我在一个文件中有一组点,如下所示: 正如你所看到的,他似乎不太了解他们。除了 // 我可以使用 MATLAB 知道它可以忽略之外还有什么?

谢谢!

【问题讨论】:

    标签: file matlab file-io import comments


    【解决方案1】:

    你试过%,MATLAB 中的默认注释字符吗?

    正如 Amro 指出的那样,如果您使用 importdata 这将起作用。

    【讨论】:

      【解决方案2】:

      其实你的数据是不一致的,因为每行的列数必须相同。

      1)

      除此之外,使用 '%' 作为 cmets 将被 importdata 正确识别:

      文件.dat

      %12 31
      12 32
      32 22
      %abc
      13 33
      31 33
      %ldddd
      77 7
      66 6
      %33 33
      12 31
      31 23
      

      matlab

      data = importdata('file.dat')
      

      2)

      否则使用 textscan 指定任意注释符号:

      file2.dat

      //12 31
      12 32
      32 22
      //abc
      13 33
      31 33
      //ldddd
      77 7
      66 6
      //33 33
      12 31
      31 23
      

      matlab

      fid = fopen('file2.dat');
      data = textscan(fid, '%f %f', 'CommentStyle','//', 'CollectOutput',true);
      data = cell2mat(data);
      fclose(fid);
      

      【讨论】:

        【解决方案3】:

        如果使用textscan函数,可以将CommentStyle参数设置为//%。试试这样的:

        fid = fopen('myfile.txt');
        iRow = 1;
        while (~feof(fid)) 
            myData(iRow,:) = textscan(fid,'%f %f\n','CommentStyle','//');
            iRow = iRow + 1;
        end
        fclose(fid);
        

        如果每行有两个数字,这将起作用。我注意到在您的示例中,每行的数字数量有所不同。有些行只有一个数字。这代表您的数据吗?如果每行中的列数不一致,则必须以不同方式处理。

        【讨论】:

        • 我把它们放在每行 2 个数字上(因为它们总是如此),但仍然不起作用。
        • 一次读取一行。我修改了我的响应以读取到文件的末尾。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-22
        • 1970-01-01
        • 2020-11-22
        • 1970-01-01
        • 2017-10-17
        • 1970-01-01
        • 2016-12-30
        相关资源
        最近更新 更多