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.

208 Operazioni di I/O interattive<br />

4.9 Istruzioni di I/O con meccanismo namelist<br />

Le istruzioni di I/O con meccanismo namelist rappresentano un metodo abbastanza ”curioso”<br />

di lettura o scrittura di dati da o verso file esterni o dispositivi standard. Specificando una o<br />

più variabili come facenti parte di un gruppo namelist è possibile leggere o scrivere i valori di<br />

ciascuna di esse attraverso un’unica istruzione di I/O.<br />

Un gruppo namelist può essere creato a mezzo di una istruzione NAMELIST la quale si<br />

presenta con la seguente sintassi:<br />

NAMELIST/nome_della_lista/lista_di_variabili<br />

in cui nome_della_lista è il nome che identifica l’intero gruppo, mentrelista_di_variabili<br />

è un elenco di nomi di variabili di tipi predefiniti, definiti dall’utente o di variabili di tipo array.<br />

Non possono, tuttavia, far parte di un gruppo namelist variabili array o stringhe di caratteri che<br />

siano parametri formali con dimensioni non costanti, array automatici o allocabili, puntatori.<br />

L’ordine con il quale le variabili sono elencate nella lista determina l’ordine con cui le stesse<br />

verranno riprodotte in una eventuale istruzione di uscita. <strong>Il</strong> nome di una stessa variabile<br />

può tranquillamente comparire in più di un gruppo NAMELIST. Infine, sebbene ciò risulterà<br />

chiaro solo dopo la lettura del capitolo dedicato alle unità di programma, si anticipa che se il<br />

gruppo NAMELIST è specificato con l’attributo PUBLIC, nessun componente della lista può avere<br />

l’attributo PRIVATE.<br />

Un esempio di utilizzo dell’istruzione NAMELIST è il seguente:<br />

REAL :: x, val INTEGER, DIMENSION(10) :: indici<br />

NAMELIST/mia_lista/x,val,indici<br />

E’ anche possibile dichiarare diversi gruppi namelist con la stessa istruzione:<br />

NAMELIST/lista_1/variabili_lista_1 [[,] /lista_2/variabili_lista_2,...]<br />

sebbene è sempre raccomandabile scrivere ciascuna istruzione NAMELIST su una linea separata.<br />

Si noti inoltre che se due istruzioni NAMELIST hanno lo stesso nome (ossia se hanno in comune<br />

il termine nome_lista ) allora la seconda lista sarà considerata come una continuazione della<br />

prima, ad esempio le istruzioni:<br />

NAMELIST/mia_lista/x,y,z(3:5) NAMELIST/mia_lista/a,b,c<br />

hanno esattamente lo stesso effetto dell’unica istruzione:<br />

NAMELIST/mia_lista/x,y,z(3:5),a,b,c<br />

Si faccia bene attenzione al fatto che NAMELIST rappresenta una istruzione di specificazione e<br />

pertanto dovrà essere opportunamente collocata all’interno della parte ”dichiarativa” del codice<br />

sorgente, prima cioè di ogni istruzione esecutiva della unità di programma in cui figura.<br />

Le operazioni di I/O con meccanismo namelist sono realizzate con istruzioni READ o WRITE<br />

che si caratterizzano per i seguenti aspetti:

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

Saved successfully!

Ooh no, something went wrong!