读取固定字段长度的文件

Reading files with fixed field length

我需要使用 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']);

但他们return什么都没有!

当我没有指定字段和精度时,例如 x = fscanf(fid,'%f');,它会读取所有数据,但正弦一些数据恰好占用 7 个空格(例如 158.000),它会连接两个连续的数字,结果是错误的输出。这是一个例子:

0.999158.000

它读作 0.999158.000

任何提示或帮助将不胜感激。

要阅读问题中指定的具有明确输入的 ASCII 文本文件,您应该使用 dlmread 函数。

>> X = dlmread(filename, delimiter);

将从 filename 中用 delimiter 分隔(沿同一行)的数字数据读取到矩阵 X 中。对于你的情况,你可以使用

>> X = dlmread(filename, ' ');

因为您的数据由 space、' ' 分隔。

如果您的数据可能没有被 space 分隔(您在问题中所做的示例中为 0.999158.000),您可以尝试使用 textscan 来读取文件。

请注意,使用此格式您不能输入 -158.000。

然而,使用这种格式,您不能有诸如 -158.000 之类的值 由于 textscan returns a 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

希望对您有所帮助。