2012-11-29 76 views
4

數據文件中讀取列我寫了下面塊從外部數據文件中讀取:從FORTRAN

 open(unit=338,file='bounnodes.dat',form='formatted') 
     DO I=1,NQBOUN 
     DO J=1,NUMBOUNNODES(I) 
      read(338,2001) NODEBOUN(i,j) 
      write(6,*) 'BOUNDARY NODES', NODEBOUN(i,j) 
     ENDDO 
     ENDDO 
    2001 
    FORMAT(32I5) 

據我理解,這應該從bounnodes.dat讀取的2×32陣列。 但是,在讀取過程中出現錯誤end-of-file,它會打印第一列。

我試着用相同的代碼讀取一個32×2數組,它讀取第一列的32個元素,但輸出0s作爲下一列。

你能解釋一下發生了什麼嗎?我的格式錯了嗎?

回答

6

Fortran中的每條讀取語句都前進到下一條記錄。這意味着正常文本文件中的新行。試試這個:

DO I=1,NQBOUN 
    DO J=1,NUMBOUNNODES(I) 
     read(338,2001,advance='no') NODEBOUN(i,j) 
     write(*,*) 'BOUNDARY NODES', NODEBOUN(i,j) 
    ENDDO 
    read(338,*) 
    ENDDO 

其中NQBOUN是行數,NUMBOUNNODES(I)是一行中的列數。 (我有問題荃,什麼是32X2與2×32)

你可以使它更短,使用隱含的DO

DO I=1,NQBOUN 
     read(338,2001) (NODEBOUN(i,j) , j=1,NUMBOUNNODES(I)) 
     write(*,*) ('BOUNDARY NODES', NODEBOUN(i,j) , j=1,NUMBOUNNODES(I)) 
    ENDDO 

甚至

DO I=1,NQBOUN 
     read(338,2001) NODEBOUN(i,:) 
     write(*,*) 'BOUNDARY NODES', NODEBOUN(i,1:NUMBOUNNODES(I)) 
    ENDDO 

所有這些使用Fortran 90的特徵。

+0

非常感謝。 我還了解到文件是逐行讀取的,所以有必要對我們讀取文件的數組進行索引。 – FortranCoderNoob