25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

8.3 Gestione dei file ad accesso sequenziale 433<br />

WRITE(11,’(A1)’,ADVANCE=’NO’) "-"<br />

DO i=7,9<br />

WRITE(11,’(I1)’,ADVANCE=’NO’) vet(i)<br />

END DO<br />

WRITE(11,’(A1)’,ADVANCE=’NO’) "-"<br />

il quale produce, sul file connesso all’unità logica 11, il record 123-00-9886.<br />

8.3.2 I/O con meccanismo namelist<br />

Le istruzioni di I/O con meccanismo namelist servono a trasferire, con la medesima istruzione,<br />

un intero gruppo di variabili senza l’obbligo di curare il formato e la modalità di presentazione.<br />

Affinché ciò sia possibile è necessario che le suddette variabili siano specificate in una opportuna<br />

lista dichiarate con una istruzione NAMELIST.<br />

Le operazioni di I/O con meccanismo namelist sono utili per inizializzare lo stesso gruppo<br />

di variabili in sessioni successive di uno stesso run o anche per cambiare, in maniera selettiva,<br />

il valore di alcune variabili a cui sia stato già assegnato un valore iniziale.<br />

I dettagli relativi all’istruzione NAMELIST sono stati già discussi nel capitolo 4 dove è stato<br />

illustrato anche il funzionamento delle istruzioni di lettura e scrittura con meccanismo namelist<br />

relativi ai dispositivi di I/O standard. Tutto quanto detto nel capitolo 4 si applica anche in<br />

relazione alla gestione dei file esterni. Può risultare utile, tuttavia, riportare la sintassi delle<br />

operazioni di connessione e di lettura/scrittura di un file ad accesso sequenziale per operazioni<br />

di I/O di tipo namelist:<br />

OPEN([UNIT=]u,FILE=fln[,ACCESS=’SEQUENTIAL’][,IOSTAT=ios] &<br />

[,STATUS=st][,ACTION=act][,DELIM=del][,PAD=pad] &<br />

[,POSITION=pos])<br />

READ([UNIT=]u,[NML=]list[,IOSTAT=ios])<br />

WRITE([UNIT=]u,[NML=]list[,IOSTAT=ios])<br />

Si noti l’assenza, nelle istruzioni READ e WRITE, della clausola relativa al formato (FORMAT=) e<br />

quella relativa all’avanzamento (ADVANCE), entrambe incompatibili con lo specificatore NML.<br />

Tanto per fissare le idee, si può considerare il seguente esempio:<br />

PROGRAM prova_namelist<br />

IMPLICIT NONE<br />

INTEGER :: m, n<br />

TYPE persona<br />

INTEGER :: matr<br />

INTEGER :: level<br />

CHARACTER(20) :: name<br />

END TYPE persona<br />

TYPE(persona) :: impiegato

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

Saved successfully!

Ooh no, something went wrong!