matlab中fscanf()的问题

时间:2014-03-17 21:30:00

标签: matlab scanf

我有一个用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') 

没有成功。这是我第一次遇到这个问题,指导将不胜感激。

2 个答案:

答案 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程序中的格式语句?