我想从循环内的一个巨大文件(超过10 ^ 10行)中读取条目。由于文件很大,我一次只读一个元素,使用它然后读取下一个元素,依此类推。因此,我有这样的事情:
DO i = 1, 10
open(unit = 1, file = 'myfile.dat')
Do j = 1, 10^10
read(1, *)x
!Use x here
Enddo
close(1)
ENDDO
当外循环运行少量时,这可以正常工作。但是,当我想尝试再次运行它(比如100到1000)时,我的计算机挂起或抛出错误:Not enough space on \tmp
。我看了this,但这并没有解决我的问题。我的主要猜测是,这种情况正在发生,因为每次重新打开文件时,它都会存储在RAM或tmp中,但我不确定。在这种情况下,任何人都可以告诉我一个更好的方法来加载文件一次但是一遍又一遍地阅读内容吗?
答案 0 :(得分:2)
您不必关闭文件,只需“快退”它:
open(newunit = iunit, file = 'myfile.dat') !no need to specify the number, the compiler will do it for you, iunit is an integer
do i = 1, 10
do j = 1, 10**10 !fortran compilable
read(iunit, *)x
!Use x here
end do
rewind(iunit)
end do
close(iunit)