2017-11-16 8 views
0

Fortran90で "syerasg.txt"というファイルを読み込もうとしています。このテキストファイルには、8984人の16年間(143,744行)の91個の変数(列)に関するパネルデータが含まれています。この変数は7つのグループに分けられ、このグループは13のサブグループに分かれています。この問題を解決する方法についてFortran実行時エラーの修正方法:ファイルの最後?

Fortran runtime error: End of file

任意のアイデア:私は次のメッセージを取得したコードを実行している場合は、

PROGRAM main 
    IMPLICIT NONE 

    INTEGER, PARAMETER :: p=8984, tf=16, sem=53, emp=7, gap=13 
    INTEGER :: r, t, j, m, g, x, i, IOstatus 
    INTEGER, DIMENSION (p,tf,emp) :: yemp 
    INTEGER, DIMENSION (p,tf,emp,gap) :: gaps 
    OPEN(UNIT=4, FILE='syearsg.txt',STATUS='old') !start gap years 
DO i=1,p 
    DO t=1,tf 
     DO j=1,emp 
      IF (j==1) THEN 
       READ(4,*)(gaps(i,t,j,g),g=1,13)    
      ELSE IF (j==2) THEN 
       READ(4,*)(gaps(i,t,j,g-13),g=14,26) 
      ELSE IF (j==3) THEN 
       READ(4,*)(gaps(i,t,j,g-26),g=27,39) 
      ELSE IF (j==4) THEN 
       READ(4,*)(gaps(i,t,j,g-39),g=40,52) 
      ELSE IF (j==5) THEN 
       READ(4,*)(gaps(i,t,j,g-52),g=53,65) 
      ELSE IF (j==6) THEN 
       READ(4,*)(gaps(i,t,j,g-65),g=66,78) 
      ELSE IF (j==7) THEN 
       READ(4,*)(gaps(i,t,j,g-78),g=79,91) 
      END IF 
     END DO  
    END DO 
END DO 
CLOSE(4) 
END PROGRAM main 

:私は、次のコードでこのファイルを読み取るしようとしていますか?

+0

ようこそ。 Fortranのすべての質問について、tag [tag:fortran]を使用してください。 –

答えて

1

ループネストの問題1,006,208(つまりp*tf*empreadステートメント。プログラムが143,744行のファイルの末尾を過ぎて実行されることは驚くことではありません。 readは、読み込みを要求された値を読み込み、次の行の先頭にスキップして、次のreadの準備をします。

あなたは次の行の先頭にスキップしないread文を語っすなわち、非進める入力と周りいじることで、あなたのプログラムを修正することができるかもしれません。しかし、それは簡単ではないでしょう。あなたはあなただけ、あなたのロジックの要求としてgapsにそれらの要素を配布し、91要素を含む単一の行を読んで、p*tfread文を発行する必要があります書いたものから

。あなたはこのような何かにあなたのコードを修正する可能性がある

(未テストではなく、非常に慎重にチェック)

INTEGER, DIMENSION(91) :: workvec 
...  
DO i=1,p 
    DO t=1,tf 
     READ(4,*) workvec    
     gaps(i,t,1,1:13) = workvec(1:13)  
     gaps(i,t,2,1:13) = workvec(14:26) 
     ...  
    END DO  
END DO 
関連する問題