2017-04-01 95 views
0

我想從循環內的大文件(超過10^10行)中讀取條目。由於文件很大,我一次讀取一個元素,使用它,然後讀取下一個元素,依此類推。因此,我有這樣的事情:在Fortran 95中一次又一次讀取文件的內容

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中,但我不確定這一點。在這種情況下,任何人都可以告訴我一個更好的方法來加載文件只有一次,但一遍又一遍地閱讀內容?

+1

你可以給我們一個正確的編譯例子。例如10^10不是Fortran。我也希望看到x的定義... –

+0

@FrancoisJacq:是的'10^10'不是一個fortran,並不意味着在我的問題中的任何地方。我已經正確地阻止了我的Fortran代碼片段。 – Peaceful

回答

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) 
+0

是的,我發現了這個。不管怎麼說,還是要謝謝你! – Peaceful