在 Fortran 95 中一次又一次地读取文件的内容
Read the contents of a file again and again in Fortran 95
我想在一个循环中从一个巨大的文件(超过 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 中,但我不确定这一点。在这种情况下,谁能告诉我一个更好的方法来只加载一次文件但一遍又一遍地读取内容?
您不必关闭文件,只需 "rewind" 它:
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)
我想在一个循环中从一个巨大的文件(超过 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 中,但我不确定这一点。在这种情况下,谁能告诉我一个更好的方法来只加载一次文件但一遍又一遍地读取内容?
您不必关闭文件,只需 "rewind" 它:
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)