Fortran 如何转到文件的结尾?

Fortran 如何转到文件的结尾?,fortran,Fortran,我打开了一个文件来写一个数字。我必须把数字写在文件的末尾,这样 如何转到最后一行写入?您应该使用 open(..., position="append",...) 或者,您可以查询文件的大小 inquire(...,size=some_integer_variable,...) 然后,如果文件是直接访问文件,则可以使用此大小计算最终记录的记录编号。或者,如果访问模式为“流”,则可以使用 write(..., pos=some_integer_variable) 从文件末尾开始写。多年来,我

我打开了一个文件来写一个数字。我必须把数字写在文件的末尾,这样


如何转到最后一行写入?

您应该使用

open(..., position="append",...)
或者,您可以查询文件的大小

inquire(...,size=some_integer_variable,...)
然后,如果文件是直接访问文件,则可以使用此大小计算最终记录的记录编号。或者,如果访问模式为“流”,则可以使用

write(..., pos=some_integer_variable)

从文件末尾开始写。

多年来,我一直在使用相同的技巧,并对更优雅的方式感兴趣,但我可以向您推荐以下方法。请注意,随着文件行数的增加,它的效率越来越低。还要注意的是,这部分代码最终可能会出现在一个优雅的模块中,专门用于处理输入/输出

打开你的文件

open(11, file='monfichier')
nbline = 0 ! should have been declared as an integer
do while(.true.)
  read(11,*,iostat=ios) ! ios should have been declared as an integer
  if( ios > 0 ) then
    stop 'problem somewhere'
  else if( ios < 0 ) then ! end of file is reached
    exit
  else
    nbline = nbline + 1
  end if
end do
close(11)
计算文件中有多少行

open(11, file='monfichier')
nbline = 0 ! should have been declared as an integer
do while(.true.)
  read(11,*,iostat=ios) ! ios should have been declared as an integer
  if( ios > 0 ) then
    stop 'problem somewhere'
  else if( ios < 0 ) then ! end of file is reached
    exit
  else
    nbline = nbline + 1
  end if
end do
close(11)

注意:请小心计算nbline-N或nbline-(N-1)的方式,具体取决于您想要什么。

程序示例 隐式无 整数::ierr

打开(单位=13,文件=“ex.dat”) 呼叫FSEEK(13,0,2,ierr) ! 那你想怎么做就怎么做

结束(13) 结束程序示例


对fseek的调用转到文件的末尾(这样使用,检查用法)

Q:FORTRAN实现是否有“fseek()”?或者您可以在“附加”模式下打开?当
position='APPEND'
满足OP的要求时,为什么要使用此方法?这比直接的方法有什么优势吗?@HighPerformanceMark——我能想到的唯一一件事是,这可以用一个严格的(古老的)f77编译器进行编译(稍加调整——例如,删除
do,而
使用语句标签、goto和if[yikes!])然而,
position='append'
直到后来才被添加(但不知道确切的添加时间有多长)。@mgilson确实。。。不过有一个问题:这种方法是否更通用,因为你可以在任何你想要的地方写东西,比如倒数第二行。您可以使用
position=
?@max来执行此操作吗?您应该可以使用
access='stream'
pos=…
来执行此操作,如另一个答案中所示。