bob*_*nto 7 binary file-io byte fortran fortran90
我有一个二进制文件,我想用Fortran阅读.问题是它不是由Fortran编写的,因此它没有记录长度指示符.因此,通常未格式化的Fortran读取将无法正常工作.
我有一个想法,我可以偷偷摸摸地将文件作为格式化文件,逐字节(或4字节,4字节,真的)读入字符数组,然后将字符的内容转换为整数和浮点数转移函数或可怕的等价语句.但是这不起作用:我尝试一次读取4个字节,根据inquire语句的POS输出,读取超过6000个字节左右,字符数组加载垃圾.
所以这是不行的.我忘了这种方法有一些细节吗?或者在Fortran中只有一种根本不同且更好的方法吗?(顺便说一句,我也试过读入一个integer*1数组和一个字节数组.即使这些代码会被编译,当它出现在read语句中时,代码崩溃了.)
Ian*_*anH 11
是.
Fortran 2003引入了对该语言的流访问.在此之前,大多数处理器支持等同于扩展的东西,可能称为"二进制"或类似.
未格式化的流访问不会在文件上生成记录结构.例如,要从特定Fortran处理器的伴随C处理器(如果有)中的单个int对应的文件中读取数据:
USE, INTRINSIC :: ISO_C_BINDING, ONLY: C_INT
INTEGER, PARAMETER :: unit = 10
CHARACTER(*), PARAMETER :: filename = 'name of your file'
INTEGER(C_INT) :: data
!***
OPEN(unit, filename, ACCESS='STREAM', FORM='UNFORMATTED')
READ (unit) data
CLOSE(unit)
PRINT "('data was ',I0)", data
Run Code Online (Sandbox Code Playgroud)
您可能仍然遇到有关endianess和数据类型大小的问题,但这些方面与语言无关.
如果您在Fortran 2003之前编写语言标准,那么未格式化的直接访问读取到合适的整数变量可能会起作用 - 它是特定于Fortran处理器但适用于许多当前处理器.