|
Lo standard F90 introduce solamente novità marginali per quanto
riguarda l'input/output, tra cui la formalizzazione di alcuni de-facto
standard, si riporta quinidi una lista non esaustiva.
Ad es. per i formati di output interi:
|
PROGRAM conformato
IMPLICIT NONE
INTEGER :: i,j,k
CHARACTER(LEN=5) :: fl
READ*,i,j
PRINT'(i4.3)',i ! ' 007'
PRINT'(i3.3)',i ! '007'
PRINT'(i0.3)',i ! '007'
PRINT'(i0)',i ! '7'
WRITE(fl,'(I5.5)')j
PRINT'('//fl//'i3)',(i,k=1,j)
END PROGRAM conformato
|
|
Tra le novità sull'I/O in F90/95, non c'è purtroppo niente di nuovo
sulla gestione delle condizioni di errore e end of file nelle
istruzioni OPEN, READ e compagnia; in particolare la
keyword IOSTAT= continua a restituire valori di errore non
standard (tranne IOSTAT=0, tutto bene). Il consiglio è
quindi:
|
PROGRAM errio
IMPLICT NONE
CHARACTER (LEN=80) :: line
INTEGER :: io
! Senza gestione dell'errore (abortisce con messaggio fortran)
OPEN(10, FILE='prog.conf', STATUS='OLD')
DO WHILE(.TRUE.)
READ(10,*,END=40) line
CALL elabora(line)
ENDDO
40 CLOSE(10)
! Con gestione dell'errore (non abortisce ma non so spiegare il motivo)
OPEN(10, FILE='prog.conf', STATUS='OLD', IOSTAT=io)
IF (io == 0) THEN
DO WHILE(.TRUE.)
READ(10,*,END=50,IOSTAT=io) line
IF (io /= 0) EXIT
CALL elabora(line)
ENDDO
50 CLOSE(10)
ENDIF
END PROGRAM errio
|