2011-08-18 67 views

回答

3

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

在这种情况下,为了跳过记录,您可以只进行空白读取,例如,

read(unitnum, *) 
3

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

解决方案使用顺序文件已经提出。我不认为这些会起作用......请解释一下,如果你知道如何使它工作。 (当然,您可以对内存中的值进行排序,然后依次写出它们。)下面是一些示例代码来说明问题。它创造的10行的文件,那么假设你想写第五值:

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 

短,它的工作原理 - 输出文件中包含10个数字与5日从5变更为99。然而,它们是二进制。

1

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

另外如果您需要它,请查看格式描述符以了解如何沿着一条线移动左/右。

相关问题