2017-09-29 11 views
2

でファイルの終わり、私はのgfortran test.f95を使用して、このプログラムを実行し、それがエラーを示しているFortranのランタイムエラー:のgfortran

At line 10 of file test.f95 (unit = 15, file = 'open.dat') 

Fortran runtime error: End of file 

誰かがここで間違っているものを私に伝えることができますか?すべてのFortranの質問のために:[FORTRANタグ]

implicit none 
integer:: a,b,c,ios 

open(unit=15,file="open.dat",status='unknown', action='readwrite',iostat=ios) 
open(unit=16,file="open.out",status="unknown",action='write') 

do a=1,100 
    write(15,*)a 
end do 

do c=1,45,1 
    read(15,*) 
    read(15,*)b 
    write(16,*)b 
end do 

stop 
end 
+0

使用してくださいタグでファイル内の場所を変更することを確認します。エラーメッセージをタイトルに正確にコピーして貼り付けると、そのような質問が既に存在することがわかります。それはすでにあなたに言っていた可能性があるので、あなたはそれをわずかに変更しなければなりませんでした。あなたは本当にまず既存の質問を読むべきです。また、あなたが読んでいるデータを私たちに示すことも非常に重要です。 –

+0

ところで 'status = 'unknown'を渡し、' end'の前に 'stop'を使うことはありません。あなたはそれを削除することができます。 –

+1

また、 'iostat'を指定せずに、結果を処理しないでください。 – agentp

答えて

0

巻き戻し/fseekを

implicit none 
integer :: a, b, c, ios, ierr 

open(unit=15, file="open.dat", action='readwrite', iostat=ios) 
open(unit=16, file="open.out", action='write') 
do a=1,100 
    write(15,*)a 
end do 

! Here we need to get back to beginning of file 
! otherwise, you try to read where you finished writing 
! at the end of file 
! CALL FSEEK(UNIT, OFFSET, WHENCE[, STATUS]) 
! https://gcc.gnu.org/onlinedocs/gfortran/FSEEK.html 
! call fseek(15, 0, 0, ierr) 

! you can also use rewind file 
! https://www.fortran.com/F77_std/rjcnf0001-sh-12.html 
rewind(15) 

do c=1,45,1 
    read(15,*) 
    read(15,*)b 
    write(16,*)b 
end do 

end 
+1

また、** rewind(15)** – cup

+3

でそれを行うこともできます。私はfseekをまったくお勧めしません。標準のFortranは十分に強力です。 –

+0

まだ非標準で移植性のない 'fseek'に固執しています:-) –

関連する問題