【问题标题】:Read data row wise from a file(.txt or .dat) in matlab从 matlab 中的文件(.txt 或 .dat)中逐行读取数据
【发布时间】:2013-11-17 23:22:35
【问题描述】:

我想从一个文件中读取一行包含数字数据的行,该文件包含一个文本行和几行包含数字数据的行。 我已经通过在 MATLAB 中使用 fopen 和 textscan(作为所有字符串值)命令尝试了这一点。加载所有数据并尝试进行任何数学运算后,它显示以下错误。

“cell”类型的输入参数的未定义函数或方法“plus”。

我正在尝试加载包含以下数据的以下文件:

K V M UV JV CI SI JRM MRJ MIM JIJ VB UB
90000 0 0 0 0 0 0 0 10800 216000 205200 226800 205200 431940 215970 215970

165026 122 122 99 23 105 7 27 10811 215874 275166 226800 205200 431940 215970 215970

165027 132 122 49 23 115 9 97 10911 215674 275166 226800 205200 431940 215970 215970

165028 142 122 79 23 155 7 107 10711 215774 225166 226800 205200 431940 215970 215970

我只需要第三行的数字数据供我使用。请帮助我。

感谢您在这方面的帮助。 迪帕克

【问题讨论】:

    标签: matlab fopen textscan


    【解决方案1】:

    这里发生了几件事情,如果没有看到您的代码,很难确切知道问题出在哪里。

    当您将数据作为字符串加载时,它就是一个字符串,所以像plus 这样的运算符不会让您走得太远。 textscan 还返回一个元胞数组,它可以很好地在单个变量中保存不同类型的数据,但不适合做数学运算。

    只要你的文件不是太长,而且你知道格式,你就可以用fgetl逐行解析文件。

    m = 1;
    fid = fopen(fileName);
    headerLine = fgetl(fid);% read in the first line, then ignore it
    dataLine = fgetl(fid); 
    while ischar(fileLine) % EOF will return -1
        C = textscan(dataLine,'%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f','delimiter',char(32));
        firstVariable(m) = C{1};
        secondVariable(m) = C{2}; % etc.
        blankLine = fgetl(fid); %this line is blank
        dataLine = fgetl(fid); %this line has data, read it in and finish the loop 
        m = m +1;
    end 
    fclose(fid)
    

    如果您事先知道(或可以以其他方式计算)您将拥有的行数,您可以并且应该预先分配您的变量,否则事情会变慢。如果您对上限有一个好主意,您可以分配比您需要的更多的空间,然后使用 m 的值在最后修剪它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多