读取固定字段长度的文件
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
希望对您有所帮助。
我需要使用 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
希望对您有所帮助。