ここでは読み取りエラーが起きてから例外処理的に”−”を処理しているが、 ”−”が多いならはじめから一度文字列で読み込んで処理するほうがすっきりする。 PROGRAM vip IMPLICIT NONE CHARACTER (LEN = 136) :: text REAL(KIND = 8) :: x(8) INTEGER :: i, ipos, io DO READ(9, *, IOSTAT = io) x IF (io == -1) EXIT IF (io > 0) THEN BACKSPACE(9) READ(9, '(A)') text DO i = 1, 8 ipos = INDEX(text, ',') - 1 IF (ipos == -1) ipos = LEN(text) ! 8th number IF (TEXT(ipos:ipos) == '-') THEN x(i) = -1.0d-10 ELSE READ(TEXT(1:ipos), *) x(i) END IF text = text(ipos + 2:) END DO END IF PRINT '(8g9.2)', x END DO STOP END PROGRAM vip