我有一个我想与Fortran的读取二进制文件。 问题是,它不是由Fortran语言写的,所以它没有记录长度的指标。 所以平时未格式化的Fortran读取将无法正常工作。
我有一个想法,我可以偷偷摸摸和读取文件的格式的文件,逐字节(或4个字节由4个字节,真的)到字符数组,然后字符的内容转换成整数,并通过浮动传递函数或可怕的等价声明。 但是,这并不工作:我尝试一次读取4个字节,根据从输出POS inquire
语句,读跳过像6000个字节左右,字符数组被装载垃圾。
所以这是一个没有去。 是否有这种做法,我忘了一些细节? 或者是有只是一个完全不同的,更好的方式用Fortran做到这一点? (顺便说一句,我也试着读入一个integer*1
阵列和一个字节数组,即使这些代码将编译,当它来读声明,代码崩溃。)
是。
Fortran 2003的推出流接入到语言。 在此之前,大多数处理器都支持等同的东西作为一个扩展,也许所谓的“二元”或类似。
未格式化的流访问强加文件中没有记录的结构。 作为一个例子,来读取相应于在同伴C处理器(如果有的话)用于特定的Fortran处理器单个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
您可能仍然有字节序和数据类型的大小问题,但这些方面都与语言无关。
如果你是2003年之前的Fortran然后格式化直接访问阅读到合适的整数变量可能工作写入语言标准 - 这是Fortran的处理器具体,但适用于许多当前的处理器。