- 积分
- 205
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-8-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 wheelar 于 2015-2-11 20:50 编辑
我想追加数据写入二进制直接文件中,就是反复多次open,close同一个二进制文件,我试了position=‘append’选项,但是失败了,可是同样的方法在文本文件顺序文件却正确,不知哪位大侠可以给解释一下?以下是代码,编译器是IVF11
program main
implicit none
integer,parameter :: intx=4, inty=5, intv=6
real :: odata(intx,inty)
integer :: iv
do iv=1,intv
odata=iv ! 把odata这个数组的所有值设为iv
call sub_writeFile(odata,intx,inty,'out.txt') !追加数据到文本文件中,正确
! call sub_appendFileBinary(odata,intx,inty,'out.grd') !追加数据到binary中,结果出错了!
enddo
read(*,*)
end program main
subroutine sub_writeFile(odata,intx,inty,strfnout) !追加数据到文本文件中
integer,intent(in) :: intx,inty
real,intent(in) :: odata(intx,inty)
character(len=*),intent(in) :: strfnout
integer :: i,j
open(unit=12,file=strfnout,access='sequential',status='unknown',position='append',action='write')
endfile(unit=12)
write(12,*)'--------------------------------------------------------------'
do i=1,intx
write(12,'(5f10.2)')(odata(i,j),j=1,inty)
enddo
close(unit=12)
end subroutine sub_writeFile
subroutine sub_appendFileBinary(odata,intx,inty,strfnout) !追加数据到binary中
integer,intent(in) :: intx,inty
real,intent(in) :: odata(intx,inty)
character(len=*),intent(in) :: strfnout
integer :: i,j
open(unit=12,file=strfnout,access='direct',recl=intx*inty,position='append',&
status='unknown',action='write')
endfile(unit=12)
write(12)((odata(i,j),i=1,intx),j=1,inty)
close(unit=12)
end subroutine sub_appendFileBinary
我写了两个subroutine,sub_writeFile和sub_appendFileBinary,几乎就同样的方法,第一个是追加写入文本文件,第二个是binary文件,可是执行第二个subroutine时,在open语句那里就出问题了(红色代码),甚至还没执行到endfile(unit=12)。提示是:“ ifort (46)inconsistent OPEN/CLOSE parameters”, 网上查询的结果是:
EXPLANATION: Specifications in an OPEN or CLOSE statement were inconsistent. Some invalid combinations follow:
- READONLY with STATUS='NEW' or STATUS='SCRATCH'
- ACCESS='APPEND' with READONLY, STATUS='NEW' or STATUS='SCRATCH'
- DISPOSE='SAVE', 'PRINT', or 'SUBMIT' with STATUS='SCRATCH'
- DISPOSE='DELETE' with READONLY
o MESSAGE: Inconsistent record length
可是我也没有用status=‘new’或readonly等东东啊?我想问问这个究竟该怎么写呢?
另外,我看有点地方说是position='append',还有说是,access='append',哪个正确呢?
最后,我试验了 open(unit=12,file=strfnout,access='sequential’,form='unformatted',position='append',&
status='unknown',action='write'),结果可以通过执行,那么是不是说追加position='append'一定要和access='sequential’连用呢
|
|