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.

420 Operazioni di I/O su file<br />

1<br />

L’ultima forma dell’istruzione INQUIRE, ossia l’inquire-by-output list consta di un solo<br />

specificatore, IOLENGTH, e si presenta con la seguente sintassi:<br />

INQUIRE(IOLENGTH=length) lista_di_output<br />

in cui length rappresenta una variabile intera mentre lista_di_output è una lista di<br />

entità che si presenta nella stessa forma di una lista di output per l’istruzione WRITE.<br />

L’effetto di questa istruzione è quello di assegnare alla variabile length la lunghezza del<br />

record che risulterebbe dall’uso della lista_di_output in una istruzione WRITE non formattata.<br />

La conoscenza della suddetta lunghezza, che viene espressa in unità dipendenti<br />

dal processore, può essere utile, ad esempio, per stabilire se una data lista di output è<br />

troppo lunga per essere contenuta in un record la cui lunghezza sia stata imposta nella<br />

istruzione OPEN con lo specificatore RECL=.<br />

A titolo di esempio, si osservi la seguente istruzione:<br />

INQUIRE (IOLENGTH=len) a, b<br />

<strong>Il</strong> suo scopo potrebbe essere quello di calcolare il valore len da assegnare allo specificatore<br />

RECL= in una istruzione OPEN che connetta un file per accesso diretto non formattato. Se,<br />

invece, è stato già specificato un valore per la clausolaRECL=, è possibile fare un ”check” su<br />

len per verificare che la lunghezza del record di uscita formato da a e b sia effettivamente<br />

minore o uguale della lunghezza di record specificata.<br />

Le tre forme dell’istruzione di interrogazione sono, probabilmente, fra le istruzioni più<br />

ostiche da gestire, tuttavia esse forniscono un metodo molto potente e ”portabile” per gestire<br />

le operazioni di allocazione e deallocazione dinamica di file, il tutto sotto il completo<br />

controllo del programma.<br />

8.2.4 Operazioni di lettura su file<br />

L’istruzioneREAD ha lo scopo di leggere una lista di valori dal file associato ad una data unità logica,<br />

convertire questi valori in accordo con un eventuale descrittore di formato e immagazzinarli<br />

nelle variabili specificate nella lista di input.<br />

L’istruzione si caratterizza per la seguente sintassi:<br />

READ([UNIT=]u[,[FMT=]fmt][,IOSTAT=ios][,REC=rn] &<br />

[,[NML=]lista][,ADVANCE=adv][,SIZE=size]) lista_di_input<br />

dove, però, non tutti gli specificatori possono essere usati insieme, come si avrà modo di capire<br />

tra breve. <strong>Il</strong> significato degli specificatori validi per l’istruzione READ è riassunto di seguito.<br />

• La clausolaUNIT=u specifica l’unità logica associata al file i cui record devono essere sottoposti<br />

a lettura; u è il numero identificativo dell’unità logica e rappresenta una espressione<br />

intera non negativa. Questo specificatore deve essere obbligatoriamente presente, tuttavia

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

Saved successfully!

Ooh no, something went wrong!