我正在尝试在Fortran中打开一个.binary文件。在Visual Studio 2010中,它看起来像这样(左边是行号,中间是十六进制,右边似乎是十六进制每个字节的ASCII表示。
Screenshot of the binary file content
我想我知道如何破译十六进制(每4个字节左右是一些信息),我可以直观地阅读它,所以我知道一旦我得到一个程序读取它我想做什么,但是我做这件事很困难。
我尝试了几种不同的选项,例如:
open(123, file=inputname,status='old', iostat=ierr,form='unformatted',err=90, access='stream')
read(123,*), line
forrtl: severe (257): formatted I/O to unit open for unformatted transfers, unit 123
----
! Trying some formatting and also now form='formatted' !
open(123, file=inputname, status='old', iostat=ierr, form='formatted',err=90,access='stream')
read(123,*), line
100 format (4(Z4.8))
forrtl: severe (64): input conversion error, unit 123
----
! formatted and removed the output formatting !
open(123, file=inputname, status='old', iostat=ierr, form='formatted',err=90,access='stream')
read(123,*), line
forrtl: severe (59): list-directed I/O syntax error, unit 123
----
依此类推,我尝试了其他几种组合。我错过了什么吗?
(注意:所有错误都在READ
命令上触发)
答案 0 :(得分:0)
看起来有点像DEBUG.EXE的输出,其中第一个条目是第一个字节的十六进制地址,然后是十六进制中接下来的16个字节的值,然后是带有由句点表示的不可打印字符的ASCII表示。遗憾的是你没有发布确切的文件,所以我们不得不从图片中猜测,但是写了一个试用程序,其格式是我最好的猜测行,作为文件的性质。问题
program readit
use ISO_FORTRAN_ENV
implicit none
integer(INT32) number
integer(INT8) data(16)
character(16) string
integer i
integer iunit
open(newunit=iunit,file='sample.txt',status='old')
do i = 1, 1000000
read(iunit,'(Z8,2(1x,8(1x,Z2)),2x,A16)',end=10) number,data,string
write(*,'(*(g0:1x))') number,data,string
end do
10 continue
end program readit
编辑:我误解了您发布的图片中显示的内容。更有理由发布实际文件。如果文件内容的每4个字节是有意义的输入,您只能以流格式读取它:
program readstream
use ISO_FORTRAN_ENV
implicit none
integer(INT32) stuff
integer iunit
open(newunit=iunit,file='sample.txt',status='old',access='stream')
do
read(iunit,end=10) stuff
write(*,'(Z8.8)') stuff
end do
10 continue
end program readstream