Input/Output: namelist

F90 standardizza il concetto, già noto come estensione F77, di namelist I/O cioè la definizione di un raggruppamento di variabili che possono essere lette/scritte con un unico comando da/a un file con un formato libero, facilmente modificabile a mano.

Le namelist sono particolarmente utili, ad es., per leggere la configurazione di un programma.

F90 permette anche l'I/O di tipi derivati o di loro membri denro le namelist, mentre non è permesso l'uso di variabili allocate dinamicamente.

Attenzione, se si desidera che una namelist contenente variabili di tipo character e scritta da fortran possa essere riletta correttamente, essa deve essere scritta su un'unità di file aperta con la keyword DELIM='APOSTROPHE' (novità F90) che indica di delimitare le stringhe con singoli apici.

Attenzione, la sintassi del file di namelist in F90 è cambiata rispetto ad alcune note estensioni F77, per cui ogni singolo blocco namelist comincia con i caratteri  &<nome> dove nome è il nome della namelist, e termina con i caratteri /END.

Tutto ciò che non rientra tra i delimitatori di namelist viene ignorato in lettura e può quindi essere usato come commento. Le variabili del gruppo namelist che non figurano nel file non vengono assegnate, per cui conservano il valore che avevano precedentemente alla READ.

PROGRAM naml

INTEGER :: nstaz, nobs(2)
REAL :: a, b
CHARACTER(LEN=10) :: rete

NAMELIST /conf/nstaz,nobs,a,b,rete

OPEN(10, FILE='conf.naml', STATUS='OLD')
READ(10, NML=conf)
CLOSE(10)

nstaz = nstaz+100
rete = 'fidugoal'

OPEN(10, FILE='conf_out.naml', STATUS='NEW', DELIM='APOSTROPHE')
WRITE(10, NML=conf)
CLOSE(10)

END PROGRAM naml