Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中fscanf()的问题_Matlab_Scanf - Fatal编程技术网

matlab中fscanf()的问题

matlab中fscanf()的问题,matlab,scanf,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.

我有一个数据文件,是用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'); 
data=fscanf(FID, '%7.3f'); % (and '%f7.3') 
它几乎完成了这项工作,详细信息是,对于大数字,它错误地存储了它们,例如,最后一行存储为

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
何时应将其存储为

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以正确的方式扫描文件。我试过了

FID=fopen(file);
data=fscanf(FID, '%f'); 
data=fscanf(FID, '%7.3f'); % (and '%f7.3') 

没有成功。这是我第一次遇到这样的问题,请给予指导

缺少分隔符,任何格式化的解析都可能失败。由于文本文件的规则形状,我将使用重塑:

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);

最简单的解决方案是创建以空格作为分隔符的数据文件,然后matlab代码将包含一个简单、可读的fscanf语句


此更改可能涉及修改Fortran程序中的format语句

我不能再创建数据了,我必须使用这种格式的文件。Ariaramnes,试着编写一个C程序,逐字节读取文件(即解析文件),并将其重新格式化为可以被Matlab的fscanf读取的内容。或者,使用Fortran程序,该程序将理解文件的格式,并在每个字段上创建一个带有空格分隔符的文件。感谢您的建议,但我希望能够在Matlab中直接使用该文件。Ariaramnes,为什么?如果重点是完成工作,那么让你的生活变得轻松。如果你试图通过设定困难的目标来学习Matlab,如果不是不可能的目标,那么祝你好运,但不要让我帮你学习!!阿里亚拉姆内斯,没问题。如果这是一个工作场所问题,那么请满足要求(显然)。然而,永远记住小林丸测试(即《星际迷航》);并寻找最简单的前进路径。谢谢,这是可行的(刚刚将num2str改为str2num)。