如何将数据写入Fortran文件中的特定行?

时间:2011-08-18 16:11:36

标签: file fortran move

我有无序数据,我想将这些数据写入带有订单的文件中。例如,值的顺序为70,然后将该值写入文件中的第70行。如何向前移动文件指针。有没有像BACKSPACE这样的命令?

3 个答案:

答案 0 :(得分:3)

当你在谈论线条和退格时,可能你的意思是access =“sequential”和form =“formatted”。

在这种情况下,为了向前跳过记录,你可以只进行一次空读,例如

read(unitnum, *)

答案 1 :(得分:3)

您还可以使用直接访问文件,在该文件中可以不按顺序写入和读取记录。例如,请参阅http://en.wikipedia.org/wiki/Fortran_95_language_features#Direct-access_files

一天后编辑:

建议使用顺序文件的解决方案。我不认为这些会起作用...请解释一下,如果你知道如何使它工作。 (当然,您可以对内存中的值进行排序并按顺序写出。)下面是一些示例代码来说明问题。它创建一个10行的文件,然后假设您要写第5个值:

program test_rewind

   integer :: i, j


   open (unit=15, file="test_rewind.txt", access="sequential", form="formatted", action="readwrite" )

   do i=1,10
      write (15, '(I4)') i
   end do

   rewind (15)

   do i=1,4
      read (15, *) j
   end do

   write (15, '(I4)') 99

   stop

end program test_rewind

输出文件包含:

   1
   2
   3
   4
  99

顺序文件的问题是对现有文件的写入会在该点之后删除所有内容。

与直接访问解决方案比较:

program test_rewind

   integer :: i

   open (unit=15, file="test_rewind.dat", access="direct", form="unformatted", action="readwrite", recl=4 )

   do i=1,10
      write (15, rec=i) i
   end do

   write (15, rec=5) 99

   stop

end program test_rewind

更短且有效 - 输出文件包含十个数字,第五个从5更改为99.但是,它们是二进制的。

答案 2 :(得分:1)

对于每个数据条目,使用janneb描述的方法到达所需的行。然后使用REWIND语句返回文件的开头(仅限access ='sequential')。

如果您需要它,请查找格式描述符以查看如何沿一条线向左/向右移动。