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.

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

16/12/2001 18.27 1’600’000 myfile.fmt<br />

16/12/2001 18.27 4’000’000 myfile.unf<br />

2 File 5’600’000 byte<br />

2 Directory 12’105’617’408 byte disponibili<br />

Tuttavia, se da un lato i file ad accesso diretto non formattati risultano sempre più compatti e<br />

veloci dei corrispondenti file formattati, è innegabile che hanno il grosso inconveniente di essere<br />

system-dependent e, dunque, non portabili fra processori differenti.<br />

8.5 File interni<br />

I file finora trattati sono tutti ”esterni”, nel senso che sopravvivono all’esterno dell’ambiente<br />

<strong>Fortran</strong>. Ciò che poteva essere ”interno” era il solo nome del file (l’unità logica) che doveva essere<br />

associato al nome esterno (noto al sistema operativo) attraverso l’operazione di connessione.<br />

Esiste, tuttavia, in <strong>Fortran</strong> la possibilità di definire un file interno, anch’esso individuato da<br />

una sua unità logica, il quale può essere considerato come una zona di memoria di transito atta<br />

alla conversione di dati interni. Un file interno coincide con una variabile (o con un array di<br />

variabili) di tipo stringa di caratteri. Un file interno è sempre di tipo di testo (ossia formattato)<br />

e può essere operato unicamente in maniera sequenziale. Non esistendo, per questo tipo di<br />

file, la controparte ”esterna”, per essi non è possibile applicare l’operazione di connessione, il<br />

riferimento al file avvenendo direttamente nella frase di I/O.<br />

Se un tale file è una variabile stringa (o una sua sottostringa) oppure è un elemento di<br />

array di tipo CHARACTER allora il file è costituito da un solo record; se, invece, esso un array di<br />

stringhe esso è costituito da tanti record quanti sono gli elementi della variabile. Si noti che<br />

una qualsiasi operazione di I/O su un file interno inizia sempre dal primo record.<br />

L’impiego tipico dei file interni è quello di applicare ad una variabile di tipo stringa, trattata<br />

alla stessa stregua di un file, gli algoritmi di conversione dei dati tipici delle operazioni di I/O.<br />

In altri termini, una stringa di caratteri che rappresenti il valore di un dato (così come avviene<br />

sui supporti di I/O) può essere trasformata in un valore numerico intero o reale e come tale<br />

memorizzata in un’altra variabile secondo la forma di rappresentazione interna per essa prevista.<br />

Utilizzando il meccanismo in esame, un qualsiasi record di input può essere letto con il<br />

formato A e registrato, sottoforma di stringa, in una variabile successivamente riguardata come<br />

file interno. <strong>Il</strong> valore di questa variabile stringa può essere successivamente esaminata sulla<br />

base di una lista di descrittori di formato allo scopo di esaminare i diversi campi da cui essa è<br />

costituita ed associare, a ciascun campo, la forma di rappresentazione interna desiderata.<br />

Un esempio di utilizzo di file interno è rappresentato dal seguente frammento di programma:<br />

CHARACTER(LEN=10) :: string<br />

REAL :: pigreco<br />

...<br />

string = " 3.14 "<br />

...<br />

READ(string,*) pigreco

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

Saved successfully!

Ooh no, something went wrong!