我有一个 shell 脚本,我从中将一个二进制文件传递给一个 fortran 程序,这样
Mth=$1
loop=1
it=1
while test $it -le 12
do
Mth=`expr $Mth + $loop`
file="DataFile"$Mth".bin"
./fort_exe ${Yr} ${nt} ${it}
# Increment loop
it=`expr $it + 1`
done
该脚本用于将 do 循环中的 12 个文件传递给 fortran 程序。在 fortran 程序中,我读取了从 shell 脚本传递的二进制文件,并尝试编写第二个文件,它将在单个文件中编译从连续文件中读取的所有数据,例如
!Open binary file passed from shell script
open(1,file='Datafile'//TRIM{Mth)//.bin',action='read',form='unformatted',access='direct', &
recl=4*x*y, status='old')
! Open write file for t 1. The status is different in t 1 and t > 1 so I open it twice: I guess there is a more elegant way to do this...
open(2,file='Newfile.bin',action='write',form='unformatted', &
access='stream', position='append', status='replace')
irec = 0
do t = 1, nt
! Read input file
irec = irec + 1
read(1,rec=irec) val(:,:)
! write output file
irecW= irec + (imonth-1)*nt
if ( t .eq. 1) write(2,pos=irecW) val(:,:)
! Close file after t = 1, update the status to old and reopen.
if ( t .eq. 2) then
close (2)
open(2,file='Newfile.bin',action='write',form='unformatted', &
access='stream', position='append',status='old')
endif
if ( t .ge. 2) write(2,pos=irecW) val(:,:)
enddo
我可以从第一个文件中读取二进制数据没有问题,但是当我尝试从另一个程序中读取我在第一个程序中写入的文件中的二进制数据时
open(1,file='Newfile.bin',action='read',form='unformatted', &
access='stream', status='old')
irec=0
do t = 1, nt
! Read input file
irec = irec + 1
read(1,pos=irec) val(:,:)
write(*,*) val(:,:)
enddo
val(:,:) 只不过是一个零列表。这是我第一次使用 access=stream,我相信这是我可以使用 position='append' 的唯一方法。我尝试使用 gfortran 和 ifort 进行编译,但没有收到任何错误消息。
有谁知道为什么会这样?