0

我对此很陌生,我正在尝试将程序从 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(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 语句..

4

2 回答 2

0

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

I/O 列表中的变量按照记录中的字节出现在列表中的顺序填充。IPT 使用隐含的执行列表填充。如果它不够明显,您可以在此处找到有关此的问题。

显示文件的打开语句可能会有所帮助。

于 2012-08-06T14:58:56.927 回答
0

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

于 2012-08-06T23:11:06.820 回答