从Fortran的二进制文件中读取,如何在Matlab中做同样的事情?

时间:2012-08-06 13:32:55

标签: fortran

我对此很陌生,我正在尝试将程序从Fortran转换为Matlab。我对Fortran中的READ函数有疑问。我有以下定义:

DIMENSION ET2(2),PV(6,12),PNUT(4),T(2),PJD(4),BUF(1500),SS(3),CVAL(400),PVSUN(3,2)
INTEGER LIST(12),IPT(3,13)

CHARACTER*6 TTL(14,3),CNAM(400)                                           
CHARACTER*80 NAMFIL 

COMMON/EPHHDR/CVAL,SS,AU,EMRAT,NUMDE,NCON,IPT                             
COMMON/CHRHDR/CNAM,TTL                                                    
COMMON/STCOMX/KM,BARY,PVSUN    

我想要理解/翻译的Read语句如下:

READ(NRFILE,REC=1)TTL,CNAM,SS,NCON,AU,EMRAT,((IPT(I,J),I=1,3),J=1,12),NUMDE,(IPT(I,13),I=1,3)

READ(NRFILE,REC=2)CVAL 

英语不是我的母语,我不太清楚我是否理解REC的定义。如果我有一个文件由四个不同的整数组成,REC = 2表示我开始从第二个整数读取?

其次,我想知道接下来会发生什么。我假设来自NRFILE的信息保存在不同的变量TTL,CNAM ......? NRFILE指的是二进制文件,但我不明白程序如何知道在每个变量中存储哪些信息。我假设同样的信息没有存储在TTL和CNAM中,因为它们有不同的尺寸?

有谁知道这在matlab中看起来如何?到目前为止我只能编写cval = fread(filID),但是我忽略了REC语句..

2 个答案:

答案 0 :(得分:0)

“REC = n”用于直接访问读取。直接访问文件中的记录可以按任何顺序读取,可能不按顺序读取。您的示例显示它们是按顺序读取的,因此可能未使用此功能,但您只显示前两个读取。直接访问记录通常是固定长度的;可能Fortran会留下通常添加到非流无格式顺序文件的记录长度信息。

I / O列表中的变量被填充,以便从记录中的字节出现在列表中。 IPT使用隐含的do列表填充。如果它不够明显,你可以在这里找到关于它的问题。

显示该文件的open语句可能会有所帮助。

答案 1 :(得分:0)

如果您要将fortran转换为matlab,请尝试使用f2matlab。它通常可以为您完成大部分工作。虽然在完成f2matlab之后你必须检查翻译(包括这些读取语句)。