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.

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

ziale oppure diretto) non è una proprietà intrinseca del file, ma viene determinato all’atto della<br />

connessione. Infatti un file può potenzialmente essere operato in modo sequenziale e/o diretto<br />

in dipendenza di un insieme di circostanze. In particolare, una apposita interrogazione al file<br />

può essere usata per sapere se un determinato metodo di accesso è consentito per uno specifico<br />

file; una volta connesso, il file è comunque sottoposto ad un unico metodo di acceso ma nulla<br />

vieta che in una precedente o successiva connessione il metodo sia diverso, purché consentito.<br />

Un file connesso con accesso sequenziale si caratterizza per il fatto che i record sono processati<br />

nello stesso ordine in cui essi appaiono nel file. Inoltre, in ogni istante è definita una<br />

posizione del file, per cui in ogni istante il file o è nella sua posizione iniziale oppure nell’intervallo<br />

fra due record. L’accesso sequenziale è caratterizzato, inoltre, dal fatto che l’operazione<br />

di lettura o di scrittura avviene sempre sul record successivo rispetto al punto in cui il file<br />

staziona (sul primo record se il file staziona nella posizione iniziale) e che dopo ogni operazione<br />

di lettura o scrittura il file avanza di un record.<br />

Occorre mettere in evidenza una importante caratteristica dei file connessi per accesso sequenziale:<br />

quando un record viene scritto su di un file sequenziale, esso è l’ultimo record del<br />

file, così ogni eventuale altro record successivo presente sul file viene distrutto. Non è, pertanto,<br />

possibile usare le istruzioni BACKSPACE o REWIND per posizionarsi su un certo record per<br />

riscriverlo lasciando i successivi record inalterati. Dunque, la scrittura del nuovo record è possibile<br />

solo perdendo tutti i record successivi, per cui le istruzioni di posizionamento vengono<br />

utilizzate, di solito, soltanto per leggere i record di un file.<br />

Sebbene non sia ammessa la riscrittura selettiva di un record, è tuttavia possibile l’aggiunta<br />

di nuovi record in coda all’ultimo record utile del file (operazione di append).<br />

La sintassi per le operazioni di connessione e di lettura/scrittura di un file ad accesso<br />

sequenziale di tipo advancing è le seguente:<br />

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

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

[,POSITION=pos])<br />

READ([UNIT=]u[,[FMT=]fmt][,IOSTAT=ios][,ADVANCE=’YES’])<br />

WRITE([UNIT=]u[,[FMT=]fmt][,IOSTAT=ios][,ADVANCE=’YES’])<br />

Naturalmente, se il file è connesso come ’UNFORMATTED’, la clausola FMT= non dovrà essere<br />

presente nelle istruzioni READ o WRITE. Si noti, tuttavia, che dal momento che i file sequenziali<br />

vengono tipicamente utilizzati per il trasferimento di dati verso altri sistemi di elaborazione<br />

oppure per la lettura o la scrittura da parte di un operatore umano, essi sono quasi sempre<br />

formattati.<br />

Le prossime istruzioni sono validi esempi di istruzioni di I/O formattate operanti su file<br />

sequenziali:<br />

OPEN(UNIT=15,FILE=’file1.txt’,FORM=’FORMATTED’,STATUS=’OLD’, &<br />

ACTION=’READ’,POSITION=’REWIND’)<br />

OPEN(UNIT=16,FILE=’file2.txt’,FORM=’FORMATTED’,STATUS=’NEW’, &

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

Saved successfully!

Ooh no, something went wrong!