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.

4.10 Non-advancing I/O 213<br />

disposizione una forma speciale di I/O chiamata, appunto, non-advancing. Questa particolare<br />

forma di ingresso/uscita può avere luogo soltanto con file esterni connessi ad accesso sequenziale<br />

(inclusi i dispositivi standard di I/O) di tipo formattato e con formato esplicito (quindi non<br />

può essere usato nelle operazioni di I/O guidate da lista o con meccanismo namelist).<br />

Le operazioni di I/O possono essere rese non-advancing includendo lo specificatore ADVANCE<br />

nelle istruzioni READ o WRITE. Questo specificatore ha la seguente forma:<br />

ADVANCE=modalità_di_avanzamento<br />

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

valore di default) oppure ’NO’.<br />

Una operazione di I/O di tipo advancing può essere scelta esplicitamente inserendo lo specificatore<br />

ADVANCE=’YES’ nella frase READ o WRITE, sebbene il risultato è lo stesso anche se si<br />

omette lo specificatore. Una operazione di I/O non-advancing, invece, ha luogo inserendo lo<br />

specificatore ADVANCE=’NO’ nella frase READ o WRITE.<br />

Per quanto concerne le operazioni di input non-advancing, è bene precisare quanto segue:<br />

• Una operazione di lettura continua sul record corrente fino a che non viene incontrata<br />

una condizione di fine record.<br />

• Se una istruzione READ non-advancing tenta di leggere dati oltre il marker di fine record<br />

viene generato un errore di run-time. In questo caso l’esecuzione del programma si arresta,<br />

a meno che l’istruzione di lettura non sia stata descritta con lo specificatore IOSTAT,<br />

nel qual caso l’esecuzione del programma non viene interrotta e il file viene posizionato<br />

immediatamente dopo il record appena letto.<br />

Come facilmente intuibile, l’uso dello specificatore IOSTAT può risultare particolarmente<br />

utile per controllare una condizione di errore. La sua sintassi è:<br />

IOSTAT=stato<br />

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

stato viene assegnato un valore rappresentativo dell’occorrenza e della tipologia di un eventuale<br />

errore. I possibili casi che possono presentarsi sono:<br />

• La variabile stato vale zero: ciò sta ad indicare che l’operazione di lettura è avvenuta<br />

con successo.<br />

• La variabile stato ha un valore positivo (dipendente dal processore): l’operazione di<br />

lettura è stata ”abortita”.<br />

• La variabile stato vale -1: è stata incontrata una condizione di fine file.<br />

• La variabile stato vale -2: è stata incontrata una condizione di fine record in una<br />

operazione di I/O non-advancing.<br />

Un uso particolarmente semplice dello specificatore IOSTAT è il seguente:

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

Saved successfully!

Ooh no, something went wrong!