从matlab中的文件(.txt或.dat)中逐行读取数据

时间:2013-11-17 14:19:45

标签: matlab fopen textscan

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

未定义的函数或方法'plus'用于'cell'类型的输入参数。

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

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

我只需要第3行的数值数据供我使用。请帮帮我。

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

1 个答案:

答案 0 :(得分:0)

你在这里发生了一些事情,没有看到你的代码,很难确切地知道问题是什么。

当您以字符串形式加载数据时,它就是一个字符串,因此像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的值在最后修剪它们。