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.

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

Al fine di confrontare l’efficienza delle operazioni di gestione di file formattati e non formattati<br />

si consideri il seguente programma il quale crea due file contenenti ciascuno 5000 record con<br />

quattro valori reali in doppia precisione per linea, dei quali però uno solo è di tipo formattato<br />

mentre l’altro è di tipo non formattato. Una volta generati in maniera random i record dei<br />

due file, essi vengono letti all’interno di due cicli separati e viene misurato il tempo speso dal<br />

programma per effettuare questa operazione.<br />

PROGRAM accesso_diretto<br />

IMPLICIT NONE<br />

INTEGER,PARAMETER :: single=SELECTED_REAL_KIND(p=6)<br />

INTEGER,PARAMETER :: double=SELECTED_REAL_KIND(p=14)<br />

INTEGER,PARAMETER :: max_records = 50000 ! max numero di record<br />

INTEGER,PARAMETER :: number_of_reads = 100000 ! numero di record letti<br />

INTEGER :: i<br />

INTEGER :: length_fmt = 80 ! lunghezza di ciascun record formattato<br />

INTEGER :: length_unf ! lunghezza di ciascun record non formattato<br />

INTEGER :: irec ! puntatore al record<br />

REAL(KIND=single) :: value<br />

REAL(KIND=single) :: time_fmt ! tempo per lettura formattata<br />

REAL(KIND=single) :: time_unf ! tempo per lettura non formattata<br />

REAL(KIND=single) :: time_begin, time_end<br />

REAL(KIND=double),DIMENSION(4) :: values ! valori del record<br />

! Valutazione della lunghezza di ciascun record nel file non formattato<br />

INQUIRE(IOLENGTH=length_unf) values<br />

WRITE(*,"(A,I2)") "Lunghezza dei record non formattati: ", &<br />

length_unf<br />

WRITE(*,"(A,I2)") "Lunghezza dei record non formattati: ", &<br />

length_fmt<br />

! Connessione dei file<br />

OPEN(UNIT=11,FILE="C:/MYPROG/OUT/myfile.fmt",ACCESS="DIRECT", &<br />

FORM="UNFORMATTED",STATUS="REPLACE",ACTION="READWRITE", &<br />

RECL=length_unf)<br />

OPEN(UNIT=12,FILE="C:/MYPROG/OUT/myfile.unf",ACCESS="DIRECT", &<br />

FORM="FORMATTED",STATUS="REPLACE",ACTION="READWRITE", &<br />

RECL=length_fmt)<br />

! Generazione dei record e loro inserimento nei rispettivi file<br />

DO i=1,max_records<br />

CALL RANDOM_NUMBER(values)<br />

WRITE(11,REC=i) values<br />

WRITE(12,"(4ES20.14)",REC=i) values<br />

END DO<br />

! Processing dei record non formattati<br />

CALL CPU_TIME(time_begin)

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

Saved successfully!

Ooh no, something went wrong!