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.

436 Operazioni di I/O su file<br />

• Nelle operazioni di ingresso, la lista di input non deve specificare più valori (o caratteri) di<br />

quanti stabiliti dalla specificazione della lunghezza del record. Nel caso, invece, in cui (per<br />

file formattati) il numero di caratteri prodotti in input siano inferiori alla specificazione<br />

della lunghezza del record, la restante parte del record viene completata con spazi bianchi<br />

a meno che non sia stato inserito lo specificatore PAD=’NO’ nella lista di OPEN, nel qual<br />

caso il comportamento adottato può variare da processore a processore.<br />

Si riportano di seguito, in forma schematica, alcuni esempi di operazioni tipiche su file ad<br />

accesso diretto:<br />

1. Generazione di un file ad accesso diretto di tipo non formattato:<br />

PROGRAM genera_data_base<br />

TYPE studente<br />

CHARACTER(LEN=10) :: nome<br />

CHARACTER(LEN=10) :: cognome<br />

INTEGER :: media_voti<br />

END TYPE studente<br />

TYPE(studente) :: elem<br />

INTEGER :: matr ! indirizzo del record da inserire<br />

LOGICAL :: finito=.FALSE.<br />

CHARACTER(LEN=1) :: risp<br />

OPEN(UNIT=11,FILE=’pagella’,STATUS=’NEW’,ACCESS=’DIRECT’, &<br />

FORM=’UNFORMATTED’,RECL=150)<br />

DO WHILE(.NOT.finito)<br />

! Acquisizione dell’indirizzo del record da inserire...<br />

READ(*,*) matricola<br />

! ... e del valore del record fa scrivere<br />

WRITE(*,100,ADVANCE=’NO’) "Nome: "; READ(*,*) elem%nome<br />

WRITE(*,100,ADVANCE=’NO’) "Cognome: "; READ(*,*) elem%cognome<br />

WRITE(*,100,ADVANCE=’NO’) "Media: "; READ(*,*) elem%media_voti<br />

100 FORMAT(1X,A)<br />

! Scrittura del record<br />

WRITE(UNIT=11,REC=matricola) elem%nome,elem%cognome,elem%media_voti<br />

! Aggiornamento della condizione logica<br />

WRITE(*,100,ADVANCE=’NO’) "Finito? (S/N): "; READ(*,*) risp<br />

IF(risp==’S’.OR.rips==’s’) finito=.TRUE.<br />

END DO<br />

CLOSE(UNIT=11,STATUS=’KEEP’)<br />

END PROGRAM genera_data_base<br />

2. Ricerca di un record per indirizzo in un file ad accesso diretto:<br />

COMPLEX :: rad ! elemento del file da ispezionare<br />

INTEGER :: pos ! indirizzo del record da trovare

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

Saved successfully!

Ooh no, something went wrong!