在Octave 3.8.2中使用textscan

时间:2015-06-17 04:25:03

标签: matlab octave textscan

以下在读取" 1.2D + 02 3.23D + 01 的数据文件时工作正常...."在 matlab ;

tempvs = textscan ( input_unit, '%f', N );
tempvs = cell2mat(tempvs);
tempvs = double(tempvs); 

但是,在八度音程(版本3.8.2)中同样不起作用(不承认" D"数字)所以我修改了一点如下;

tempvs = textscan ( input_unit, '%s', N );
tempvs = cell2mat(tempvs);
values = zeros(N,1);
for i = 1: N
   values(i) = str2num(tempvs{i,1});
end

还有其他有效的方法来完成这项工作吗? 在此先感谢您的帮助。

注意:将数据文件更改为" 1.2E + 02 3.23E + 01 ...." form不是一个选项,已经尝试使用fgetl进行逐行读取,但速度很慢。

1 个答案:

答案 0 :(得分:0)

fopen该文件,一次性阅读fread(fid, "char=>char").'并在您的文件到处都是textscan ( regexprep(input_unit,"D","E"), '%f' )时尝试input_unit="1.2D+02 3.23D+01"。只要您的文件适合您的RAM,这应该是非常快速的。但我不知道D数字是什么?