• Non ci sono risultati.

I/O in Fortran

N/A
N/A
Protected

Academic year: 2021

Condividi "I/O in Fortran"

Copied!
5
0
0

Testo completo

(1)

I/O in Fortran

Paolo Bison

Fondamenti di Informatica Ingegneria Meccanica

Università di Padova A.A. 2008/09

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.1

Print e Read



sintassi

R911 print-stmt

is PRINT format [ , output-item-list ] R909 read-stmt

is READ ( io-control-spec-list ) [ input-item-list ] or READ format [ , input-item-list ] R913 format

is char-expr or *

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.2

Formato di I/O



specificazione del formato di scrittura/lettura



stringa costante/variabile di tipo character

" format-specification "

R1002 format-specification is ( [ format-item-list ] ) R1003 format-item

is [ r ] data-edit-desc or control-edit-desc

or [ r ] ( format-item-list ) R1005 data-edit-desc

is I w [ . m ]

or F w . d

or ES w . d

or E w . d

or L w

or A [ w ] R1010 control-edit-desc

Parametri dei descrittori



r

fattore di ripetizione



w

ampiezza di campo



m

numero minimo cifre da visualizzare



d

numero cifre decimali

(2)

Descrittori dati



Iw [.m]

valore intero



Fw.d

valore reale in notazione decimale



ESw.d e Ew.d

valore reale in notazione scientifica m × 10

e

ES: 1.0 ≤ m < 10.0

E: 0.1 ≤ m < 1.0



Lw

valore logico



Aw

stringhe di caratteri

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.5

Descrittori di controllo



nX

salta n spazi



Tc

avanza alla posizione c della riga



/

va a nuova linea



’chars’

stampa i caratteri chars



esempio d’uso dei descrittori io_test.f90

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.6

I/O su file



istruzioni su file

R216 action-stmt is ...

or open-stmt or read-stmt or write-stmt or close-stmt or ...

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.7

Open



associazione tra un file ed un numero di unità



sintassi

R904 open-stmt

is OPEN ( connect-spec-list )

R905 connect-spec

is UNIT = file-unit or IOSTAT = int-variable or FILE = file-name-expr or STATUS = scalar-char-expr or ACTION = scalar-char-expr

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.8

(3)

Parametri dell’open



UNIT

valore intero da associare al file



IOSTAT

variabile intera per il codice d’errore 0 operazione OK, 6= 0 operazione errata



STATUS

una tra "old", "new", "scratch", "replace"



ACTION

una tra "read", "write", "readwrite"

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.9

Close



chiude il file associato ad un valore di unità



sintassi

R907 close-stmt

is CLOSE ( close-spec-list )

R908 close-spec

is UNIT = external-file-unit or IOSTAT = int-variable or STATUS = char-expr



STATUS

una tra "keep", "delete"

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.10

Read e write



sintassi

R909 read-stmt

is READ ( io-control-spec-list ) [ input-item-list ] R910 write-stmt

is WRITE ( io-control-spec-list ) [ output-item-list ] R912 io-control-spec

is UNIT = io-unit or FMT = format

or IOSTAT = scalar-default-int-variable



* valore default



equivalenze

print *,items≡write (*,*) items≡write (unit=*,fmt=*) items

write_file.f90

program write_file

integer :: i,err,n_min,n_max,n integer :: rand_int

real :: rnd

character (len=50) :: f_name print *,"file name"

read *,f_name

print *,"n_min n_max"

read *,n_min,n_max print *,"n"

read *,n

(4)

write_file.f90

! inizializza generatore numeri casuali call random_seed() !

open(unit=8,file=trim(f_name), &

iostat=err,status="replace",action="write") if (err/=0) then

print *,"impossibile creare un file"; stop end if

do i = 1,n

! ritorna un valore reale tra 0 e 1 call random_number(rnd)

rand_int = int((n_max - n_min + 1)*rnd) + n_min write (unit=8,fmt=*,iostat=err)rand_int

end do

close(unit=8)

end program write_file I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.13

read_file.f90

program read_file integer :: err,num integer :: somma

character (len=50) :: f_name print *,"file name"

read *,f_name

open(unit=8,file=trim(f_name), &

iostat=err,status="old",action="read") if (err/=0) then

print *,"file non esiste"

stop end if

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.14

read_file.f90

somma=0 do

read(unit=8,fmt=*,iostat=err)num if (err/=0) then ! fine file

exit end if

somma = somma+num end do

close(unit=8) print *,somma

end program read_file

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.15

Do implicito



ciclo iterativo come argomento di istruzioni I/O

R434 ac-implied-do

is ( ac-value-list , ac-implied-do-control ) R435 ac-implied-do-control

is ac-do-variable = int-expr , int-expr [ ,int-expr ] R436 ac-do-variable

is int-variable



esempi

print "(10(’a=’,I3,/))",(a(i),i=10,1,-1) print "(10(I2,’ a=’,I3,’ b=’,I3,/))", &

(i,a(i),b(i),i=10,1,-1)

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.16

(5)

Normalizzazione di valori



dato un insieme di valori memorizzati in file creare un file contenente i corrispondenti valori normalizzati tra -1 e 1



max(abs(x)) = 1



file norm_file.f90

I/O in Fortran, Paolo Bison, FI08, 2008-09-29 – p.17

Riferimenti

Documenti correlati

DATI E MODELLO 35 Si può notare come la tempo varianza della risposta impulsiva inuenzi soprattutto gli arrivi più tardivi: essendo questi dati da raggi che percorrono una

Regnauld [14] focuses on the development of an algorithm for generalising build- ings from 1:15,000 to 1:50,000. His attention is no longer on generalisation of build- ing shapes,

In Byob i dati di prima classe sono molti di più, si utilizzano quindi ingressi di molti più tipi, che comprendono anche procedure, liste e oggetti.. Richiamiamo ora la descrizione

We used the LIVE IQA database [27] to test the perfor- mance of BRISQUE, which consists of 29 reference images with 779 distorted images spanning five different distortion categories

La correttezza delle credenziali d’accesso viene verificata tramite una pagina in PHP che, dopo aver letto i dati inviati dal form tramite metodo post, verifica nel database la

Nell'esecuzione di richieste al server PHP è quindi più favorita perché può fare delle richieste SOAP o REST che non fanno altro che eseguire altro codice PHP (nel nostro caso vi

Come conseguenza ai lavori precedenti e alle problematiche riscontrate (dataset sporco, rilevazione multipla di una stessa discontinuità, rete neurale ecces- sivamente grande per

Attualmente non è però possibile percorrere questa strada dal momento che alcune funzioni svolte dal software LabVIEW, come ad esempio lo scambio di dati con un