我有一个用Fortran(?)编写的数据文件,格式为F7.3,所以行看起来像这样
78.225 0.053 78.230 0.068 78.235 0.079 78.240 0.079 78.245 0.071
78.250 0.047 78.255 0.017 78.260 -0.019 78.265 -0.039 78.270 -0.042
...
这很好,但随着数字变大,它们开始看起来像
195.950 0.001195.955 0.001195.960 0.002195.965 0.002195.970 0.002
195.975 0.003195.980 0.003195.985 0.004195.990 0.004195.995 0.004
...
这不方便。我计划用这些数据进行一些计算,但现在我甚至无法将其保存为矢量。我试过了
FID=fopen(file);
data=fscanf(FID, '%f');
这几乎完成了这项工作,其中大数字的细节不正确地存储它们,例如最后一行存储为
195.9750
0.0032
0.9800
0.0032
0.9850
0.0042
0.9900
0.0042
0.9950
0.0040
何时应将其存储为
195.975
0.003
195.9800
0.003
195.9850
0.004
195.9900
0.004
195.9950
0.004
我真的不知道如何告诉MATLAB以正确的方式扫描文件。我试过了
data=fscanf(FID, '%7.3f'); % (and '%f7.3')
没有成功。这是我第一次遇到这个问题,指导将不胜感激。
答案 0 :(得分:2)
缺少分隔符,任何格式化的分析都可能失败。由于文本文件的规则形状,我会使用reshape:
charspercolumn=7
fid = fopen('filename');
tline = fgetl(fid);
while ischar(tline)
x=str2num(reshape(tline',charspercolum,[])')
%store your data somewhere
tline = fgetl(fid);
end
fclose(fid);
答案 1 :(得分:0)
最简单的解决方案是使用空格作为分隔符创建数据文件,然后您的matlab代码将包含一个简单,可读的fscanf语句。
此更改可能涉及修改Fortran程序中的格式语句?