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.4 Gestione dei file ad accesso diretto 435<br />

RECL=rec nell’istruzione OPEN. Si ricorda che la lunghezza di un record è misurata in numero<br />

di caratteri, per file formattati, o in unità dipendenti dal processore, per file non formattati.<br />

Tuttavia, dal momento che un file generato ad accesso diretto non può normalmente essere<br />

trasferito da una macchina all’altra, non c’è ragione di effettuare una conversione dei valori in<br />

esso immagazzinati dalla modalità di rappresentazione interna alla modalità testo. Ne discende<br />

che i file ad accesso diretto sono, nella stragrande maggioranza dei casi, non formattati. Si<br />

perviene in tal modo a forme più compatte di registrazione e ad operazioni più veloci in quanto<br />

si evitano le operazioni di conversione.<br />

Per accedere ad un record su di un file ad accesso diretto occorre conoscerne il numero<br />

d’ordine che contraddistingue ciascun record. <strong>Il</strong> numero d’ordine del record da processare deve<br />

essere specificato nella lista di controllo della frase di I/O mediante la specificazione REC=nr .<br />

Se un file è connesso per accesso diretto, per esso non è possibile effettuare operazioni di<br />

I/O non advancing, con formato guidato da lista o con meccanismo namelist. Ne discende che<br />

la sintassi per le operazioni di connessione e di lettura/scrittura è le seguente:<br />

OPEN([UNIT=]u,FILE=fln[,FORM=fm],ACCESS=’DIRECT’,RECL=rl &<br />

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

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

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

Contrariamente ai file ad accesso sequenziale, i file ad accesso diretto consentono un aggiornamento<br />

dei loro record nel senso che è possibile modificare un certo record lasciando inalterati<br />

tutti i precedenti ed i successivi. Tuttavia, sebbene sia possibile riscrivere in maniera selettiva<br />

un record del file, non è possibile eliminarlo dal file (al più è possibile sovrascriverlo con una<br />

serie di blank).<br />

Per la gestione dei file ad accesso diretto è doveroso, infine, rammentare le seguenti regole:<br />

• Un qualsiasi tentativo di leggere un record di un file connesso ad accesso diretto che non<br />

sia stato precedentemente scritto fa sì che tutte le entità specificate nella lista di input<br />

diventino indefinite.<br />

• Se la specificazione di formato (per file formattati) impone l’avanzamento di un record<br />

(ad esempio attraverso l’utilizzo del descrittore slash) il numero di record è incrementato<br />

di un’unità sicché la successiva operazione di lettura/scrittura interesserà il record con<br />

numero d’ordine successivo a quello attuale.<br />

• Nelle operazioni di uscita, la lista di output non deve specificare più valori (o caratteri, a<br />

seconda che il file sia non formattato oppure formattato) di quanti siano compatibili con<br />

la specificazione della lunghezza del record. Nel caso, invece, in cui il numero di valori (o<br />

caratteri) prodotti in input siano inferiori alla specificazione della lunghezza del record,<br />

la restante parte del record resta indefinita (per file non formattati) oppure completata<br />

con spazi bianchi (per file formattati).

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

Saved successfully!

Ooh no, something went wrong!