Io 用Fortran90读取二进制输入
有人用下面的子程序为我生成了一个输出Io 用Fortran90读取二进制输入,io,binary,fortran,Io,Binary,Fortran,有人用下面的子程序为我生成了一个输出 subroutine write(...) REAL*8 v(a), h(b), f(b) integer iv(b+1), jv(a) write(ium) a, b, c, d, e write(ium) (iv(i),i=1,b+1) write(ium) (jv(i),i=1,a) write(ium) (v(i),i=1,a) write(ium) (f(i),i=1,b) write(ium) (h(i),i=1,b) retur
subroutine write(...)
REAL*8 v(a), h(b), f(b)
integer iv(b+1), jv(a)
write(ium) a, b, c, d, e
write(ium) (iv(i),i=1,b+1)
write(ium) (jv(i),i=1,a)
write(ium) (v(i),i=1,a)
write(ium) (f(i),i=1,b)
write(ium) (h(i),i=1,b)
return
end
我知道a、b、c、d和e都是整数(尽管例程没有这样指定它们,可以吗?!)。整个输出进入一个二进制文件,由他发送给我,我现在想检索所有(分离的)信息回来
我真的不太了解Fortran I/O,所以我希望有人能帮我…这里有一个简单的例子,基本上就是通过
读取来交换写。首先要注意分配阵列
program test
implicit none
integer,parameter :: ium=1234
integer :: a=1, b=2, c=3, d=4, e=5
REAL*8,allocatable :: v(:), h(:), f(:)
integer,allocatable :: iv(:), jv(:)
integer :: i, stat
! Set values
allocate( v(a), h(b), f(b), iv(b+1), jv(a), stat=stat )
if (stat/=0) stop 'Cannot allocate memory!'
v=1.d0
h=2.d0
f=3.d0
iv = 4
jv = 5
write(*,*) v, h, f
! Write back
open(unit=ium, file='test',form='unformatted',status='replace',action='write')
write(ium) a, b, c, d, e
write(ium) (iv(i),i=1,b+1)
write(ium) (jv(i),i=1,a)
write(ium) (v(i),i=1,a)
write(ium) (f(i),i=1,b)
write(ium) (h(i),i=1,b)
close(ium)
! Scratch
deallocate( v, h, f, iv, jv )
!========================================
! Read in
open(unit=ium, file='test',form='unformatted',status='old',action='read')
read(ium) a, b, c, d, e
! Allocate arrays
allocate( v(a), h(b), f(b), iv(b+1), jv(a), stat=stat )
if (stat/=0) stop 'Cannot allocate memory!'
read(ium) (iv(i),i=1,b+1)
read(ium) (jv(i),i=1,a)
read(ium) (v(i),i=1,a)
read(ium) (f(i),i=1,b)
read(ium) (h(i),i=1,b)
close(ium)
write(*,*) v, h, f
deallocate( v, h, f, iv, jv )
end program
根据你的需要调整这个 这里有一个简单的例子,基本上就是通过read
交换write
。首先要注意分配阵列
program test
implicit none
integer,parameter :: ium=1234
integer :: a=1, b=2, c=3, d=4, e=5
REAL*8,allocatable :: v(:), h(:), f(:)
integer,allocatable :: iv(:), jv(:)
integer :: i, stat
! Set values
allocate( v(a), h(b), f(b), iv(b+1), jv(a), stat=stat )
if (stat/=0) stop 'Cannot allocate memory!'
v=1.d0
h=2.d0
f=3.d0
iv = 4
jv = 5
write(*,*) v, h, f
! Write back
open(unit=ium, file='test',form='unformatted',status='replace',action='write')
write(ium) a, b, c, d, e
write(ium) (iv(i),i=1,b+1)
write(ium) (jv(i),i=1,a)
write(ium) (v(i),i=1,a)
write(ium) (f(i),i=1,b)
write(ium) (h(i),i=1,b)
close(ium)
! Scratch
deallocate( v, h, f, iv, jv )
!========================================
! Read in
open(unit=ium, file='test',form='unformatted',status='old',action='read')
read(ium) a, b, c, d, e
! Allocate arrays
allocate( v(a), h(b), f(b), iv(b+1), jv(a), stat=stat )
if (stat/=0) stop 'Cannot allocate memory!'
read(ium) (iv(i),i=1,b+1)
read(ium) (jv(i),i=1,a)
read(ium) (v(i),i=1,a)
read(ium) (f(i),i=1,b)
read(ium) (h(i),i=1,b)
close(ium)
write(*,*) v, h, f
deallocate( v, h, f, iv, jv )
end program
根据你的需要调整这个 不,因为我得到的关于他如何写文件的唯一信息是这个例程…不,因为我得到的关于他如何写文件的唯一信息是这个例程…+1--值得注意的是,“未格式化”fortran不是Nescesarity平台可移植的,所以如果失败,你可能需要深入挖掘。(而且这不是一种交换数据的明智方式)+1--值得注意的是,“未格式化”fortran不具备平台可移植性,因此如果失败,您可能需要深入挖掘。(这不是交换数据的明智方式)