我正在尝试理解一些 Fortran 代码。在某一时刻,有一行读取二进制文件而不指定任何输入列表,仅指定文件本身和用于到达文件末尾的语句标签:
open (unit=unitname,file='name.ext',form='unformatted',status='old',iostat=ios)
...
read (myFile,end=902)
我使用一些 Python 代码读取了该文件,并进行了一些调试,我意识到 Fortran 代码使用此 read
命令恰好跳过了 2484 个字节(是的,我数过!)。不知道这是否有什么特殊原因。如果我没记错的话,Fortran 中的 read
命令会简单地读取整行,而无需任何输入列表,但由于这是一个二进制文件,我想知道接下来会发生什么。这个2484这个神奇数字从何而来?当您在 Fortran 中读取二进制文件而不指定输入列表时会发生什么?
最佳答案
对于为顺序访问而连接的文件,不带输入项的 read
语句会将文件的位置前进一条记录。
对于格式化输入,正如您在问题中注意到的那样,这样的读取会跳过一行:在文件中,一条记录通常是一行。
同样的想法也适用于未格式化的输入,即您所说的二进制文件。这里的记录的含义可能有点超出了这个答案的范围(并且这方面有很多细微差别),但需要注意的关键一点是,记录大小仍然有一个明确定义的概念。
为了完全证明该语句的合理性,您的文件确实已连接以进行未格式化的传输(并且与该 read
语句兼容):
open (unit=unitname,file='name.ext',form='unformatted',status='old',iostat=ios)
如果没有 access=
说明符,则相反,open
模式是顺序的。
关于python - 使用 Fortran 读取二进制文件 - 如果没有提供输入列表,Fortran 会跳过多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36899696/