Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
在Fortran中读取二进制文件时,如何在Matlab中执行相同的操作?_Fortran - Fatal编程技术网

在Fortran中读取二进制文件时,如何在Matlab中执行相同的操作?

在Fortran中读取二进制文件时,如何在Matlab中执行相同的操作?,fortran,Fortran,我对这个很陌生,我正在尝试将一个程序从Fortran翻译成Matlab。我有一个关于Fortran中读取函数的问题。我有以下定义: 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)

我对这个很陌生,我正在尝试将一个程序从Fortran翻译成Matlab。我有一个关于Fortran中读取函数的问题。我有以下定义:

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语句。

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

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


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

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

所以,REC=1并不意味着只读取第一条记录?这意味着它将从记录一开始读取,然后读取下一条记录,依此类推?open语句:open(NRFILE,FILE=NAMFIL,ACCESS='DIRECT',FORM='UNFORMATTED',RECL=IRECSZ,STATUS='OLD'),所以我猜每个被读取的记录都由与RECL相等的字节数组成?我有点不确定如何在matlab中实现这一点。我认为很难将正确的记录转换为正确的变量或数组。我如何知道进入例如TTL的记录数?如果我要在matlab中实现这一点,那么首先将第一个n字节(我想是TTL的大小)读入TTL,然后从那里读入CNAM是正确的吗?