我需要使用MATLAB fscanf
命令读取ASCII数据文件。数据基本上是具有固定字段长度和精度的浮点数。在每行数据文件中有10列数值,行数从一个文件到另一个文件不等。以下是第一行的示例:
0.000 0.000 0.005 0.000 0.010 0.000 0.015 0.000 0.020 -0.000
字段宽度为7,精度为3.
我试过了:
x = fscanf(fid,'%7.3f\r\n');
x = fscanf(fid,[repmat('%7.3f',1,10) '\r\n']);
但他们什么也没有回来!
当我没有指定字段和精度时,例如x = fscanf(fid,'%f');
,它会读取所有数据但是正则一些数据占用正好7个空格(例如158.000)它连接两个连续的数字会导致输出错误。这是一个例子:
0.999158.000
它将其显示为0.999158
和.000
任何提示或帮助都将受到高度赞赏。
答案 0 :(得分:2)
如果您的数据可能没有空格分隔(在您在问题中的示例中为0.999158.000),您可以尝试使用textscan
来读取文件。
请注意,使用此格式时,您无法输入-158.000。
然而,使用此格式,您不能拥有-158.000之类的值
由于textscan
返回cellarray
,您可能需要将cellarray
转换为矩阵(如果您不喜欢使用cellarray
)。
fp=fopen('input_file_5.txt')
x = textscan(fp,repmat('%7.3f',1,10))
fclose(fp)
m=[x{:}]
输入文件
0.999130.000 0.005 0.000 0.010 0.000 0.015 0.000 0.020 -0.000
0.369-30.000123.005 0.000 0.040 0.000 0.315 0.000 0.020-10.000
<强>输出强>
m =
Columns 1 through 8
0.9990 130.0000 0.0050 0 0.0100 0 0.0150 0
0.3690 -30.0000 123.0050 0 0.0400 0 0.3150 0
Columns 9 through 10
0.0200 0
0.0200 -10.0000
希望这有帮助。
答案 1 :(得分:1)
要读取问题中指定的具有明确定义输入的ASCII文本文件,您应使用dlmread
函数。
>> X = dlmread(filename, delimiter);
会将filename
的数字数据(delimiter
)与X
分隔到>> X = dlmread(filename, ' ');
的数据中。对于你的情况,你可以使用
' '
因为您的数据是以空格Running command: ga("send", "pageview", undefined)
分隔的。