25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

214 Operazioni di I/O interattive<br />

READ(UNIT=*,FMT=100,IOSTAT=ioerror) x,y,z IF(ioerror/=0) THEN<br />

... ! Si puo’ stampare un messaggio di errore<br />

... ! e si possono prendere eventuali precauzioni<br />

... ! prima di abortire l’operazione<br />

END IF 100 FORMAT(...) ! Continua la normale esecuzione<br />

Si noti che l’utilizzo dello specificatore IOSTAT non è limitato al controllo delle operazioni di<br />

non-advancing I/O ma, al contrario, è di applicabilità del tutto generale. Anche per questo<br />

motivo si ritornerà sull’argomento nel capitolo 8 dove si continuerà a parlare dei meccanismi di<br />

I/O.<br />

Nel caso in cui abbia avuto luogo una condizione di errore può risultare utile conoscere il<br />

numero di caratteri che sono stati letti. Ciò può essere ottenuto a mezzo dello specificatore<br />

SIZE il quale ha la seguente forma:<br />

SIZE=contatore<br />

in cui contatore è una variabile di tipo INTEGER. Al termine dell’operazione di lettura alla<br />

variabile contatore viene assegnato il numero di caratteri letti ad eccezione dagli eventuali<br />

caratteri blank. Così, ad esempio, dato il seguente frammento di programma:<br />

! Esempio di lettura ’’non avanzante’’ INTEGER recsize,stato<br />

CHARACTER(50) stringa<br />

READ(UNIT=*,FMT=’(A15)’,ADVANCE=’NO’,SIZE=recsize,IOSTAT=stato)<br />

stringa IF(stato==-2) THEN<br />

PRINT*, "Ripeti l’immissione della stringa"<br />

READ(*,’(A)’,ADVANCE=’NO’) stringa<br />

END IF WRITE(*,*) stringa<br />

se la lunghezza del record di ingresso fosse minore di cinquanta caratteri, l’istruzione READ<br />

incontrerebbe una condizione di fine record, la variabile stato assumerebbe pertanto il valore<br />

-2 mentre il valore della variabile recsize risulterebbe pari proprio al numero di caratteri<br />

letti ossia all’effettiva lunghezza del record introdotto. Pertanto potrebbe avere luogo una<br />

nuova operazione di lettura di un record di esattamente recsize caratteri che non genererebbe<br />

alcuna condizione di errore. Come detto, la variabile contatore dello specificatore SIZE ignora<br />

gli eventuali caratteri blank che contornano il record letto. Esiste, tuttavia, la possibilità<br />

di rendere significativi tali caratteri, connettendo, cioè, il file di lavoro (nella fattispecie, il<br />

dispositivo standard di lettura) e inserendo lo specificatore PAD posto pari a ’NO’. Questo<br />

specificatore ha la forma:<br />

PAD=modalità_di_padding<br />

in cui modalità_di_avanzamento è una espressione carattere che può valere ’YES’ (il valore<br />

di default) oppure ’NO’. Nel caso esso valga ’YES’ (oppure se è omesso) il processore aggiunge<br />

nelle operazioni di input formattate dei ”bianchi di testa” ai record la cui lunghezza risulti<br />

minore di quanto specificato dalla specificazione di formato. Se il valore di PAD è ’NO’ la<br />

lunghezza del record di input deve essere pari almeno a quanto specificato dal formato. Così,<br />

ad esempio, se un programma contiene le seguenti istruzioni:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!