Operazioni di input e output in Fortran 90



Похожие документы
Metodologie di programmazione in Fortran 90

I file di dati. Unità didattica D1 1

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Fortran per Ingegneri

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Spiegazione Open Interest Storico:

Funzioni in C. Violetta Lonati

Matlab: Gestione avanzata dei file

TEST: Word & Excel Tutti i diritti riservati. Computer Facile -

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Cos è ACCESS? E un programma di gestione di database (DBMS) Access offre: un ambiente user frendly da usare (ambiente grafico)

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Strutturazione logica dei dati: i file

Introduzione. Informatica B. Daniele Loiacono

Architettura hardware

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Informazione analogica e digitale

PROMEMORIA: Come creare, compilare ed eseguire programmi in Fortran 95

Gestione dei File in C

MANUALE EDICOLA 04.05

Codifica: dal diagramma a blocchi al linguaggio C++

Logica e codifica binaria dell informazione

Introduzione al MATLAB c Parte 2

4.1 FAX Sollecito consegne via (Nuova funzione)

I componenti di un Sistema di elaborazione. Memoria centrale. È costituita da una serie di CHIP disposti su una scheda elettronica

Descrizione di un algoritmo

APPUNTI SUL LINGUAGGIO DI PROGRAMMAZIONE PASCAL

Struttura degli elenchi riepilogativi

Test Excel conoscenze di Base

MS Word per la TESI. Barra degli strumenti. Rientri. Formattare un paragrafo. Cos è? Barra degli strumenti

Olga Scotti. Basi di Informatica. File e cartelle

Uso di base delle funzioni in Microsoft Excel

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Appunti sulla Macchina di Turing. Macchina di Turing

RISOLUTORE AUTOMATICO PER SUDOKU

L utility Unix awk [Aho-Weinberger-Kernighan]

Dispensa di database Access

Appunti sugli Elaboratori di Testo. Introduzione. D. Gubiani. 19 Luglio 2005

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Eclipse - Nozioni Base

7.4 Estrazione di materiale dal web

Lezione 5. Fogli di calcolo

Compilatore risorse display grafico LCD serie IEC-line

Corso di Informatica

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Organizzazione degli archivi

4 3 4 = 4 x x x 10 0 aaa

Gestione del workflow

Moduli (schede compilabili) in Word Esempio: scheda di alimentazione per un degente

Prof. Nicola Cappuccio

STAMPA UNIONE DI WORD

LCMobile Restaurant. Guida su come usare il software per palmare LCMobile Restaurant.

CPU. Maurizio Palesi

Calcolatori Elettronici Parte X: l'assemblatore as88

APPUNTI DEL CORSO DI LABORATORIO DI CALCOLO AVANZATO

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Esercizio 2. Client e server comunicano attraverso socket TCP

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera

Programmazione I - Laboratorio

Calcolatori Elettronici. La memoria gerarchica La memoria virtuale

EUROPEAN COMPUTER DRIVING LICENCE SYLLABUS VERSIONE 5.0

Manuale per i redattori del sito web OttoInforma

TECNICHE AVANZATE DI I/O. Al loro livello più basso, tutti i file scritti sull hard disk. Training per esperti SU FILE

Corso di Access. Prerequisiti. Modulo L2A (Access) 1.1 Concetti di base. Utilizzo elementare del computer Concetti fondamentali di basi di dati

1) Come si crea una cartella? Menù File/Nuovo/Cartella Menù File/ Nuova cartella Menù Visualizza/Cartella

Esercizio 1. Esercizi 5. Esercizio 3. Esercizio 2 CICLI

Introduzione al Linguaggio C

Il sistema operativo: interazione con l utente

Guida all uso di Java Diagrammi ER

connessioni tra i singoli elementi Hanno caratteristiche diverse e sono presentati con modalità diverse Tali relazioni vengono rappresentate QUINDI

Microsoft Word. Nozioni di base

MICROSOFT WORD LA STAMPA UNIONE

Esame di INFORMATICA

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Informatica Generale 02 - Rappresentazione numeri razionali

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Il Software. Il software del PC. Il BIOS

Il file system. meccanismi di accesso e memorizzazione delle informazioni (programmi e dati) allocate. in memoria di massa

Database Manager Guida utente DMAN-IT-01/09/10

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata

CONTABILITÀ. Gestione Attività Multipunto. Release 5.20 Manuale Operativo

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

Operazioni fondamentali

INFORMATICA, IT e ICT

Транскрипт:

Operazioni di input e output in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 1 / 28

Cosa vedremo in questa lezione 1 Concetti fondamentali sui file 2 Gestire i file con il Fortran 90 3 Esempi di applicazioni 4 Formattazione dell input e dell output Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 2 / 28

Concetti fondamentali sui file File: concetti fondamentali File: sequenza di elementi (ad es. caratteri) memorizzati in memoria secondaria. File di testo: qualsiasi cosa che possa essere letta da tastiera o scritta su video in chiaro, senza decodifica (interi, reali, caratteri,... ). Disciplina d accesso maniera di accedere ai dati: sequenziale = dal primo ai successivi, in sequenza casuale ad uno qualsiasi, in ogni momento Questi concetti sono indipendenti dal linguaggio di programmazione Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 3 / 28

Concetti fondamentali sui file I file e il sistema operativo I dati in un PC sono gestiti attraverso il file system Solitamente con struttura gerarchica Il file system associa ad ogni porzione di dati memorizzati un nome fisico (stringa di caratteri + estensione) A volte il sistema operativo impone restrizioni su: Lunghezza stringa, ad es. in DOS max 8 caratteri + estensione (limitazione superata con i nuovi sistemi operativi) Uso maiuscole/minuscole (ad es. DOS è case-insensitive) Al nome fisico di un file può corrispondere un nome logico, definito ad esempio internamente ad un programma Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 4 / 28

Concetti fondamentali sui file Operazioni principali su un file Apertura di un file: creare accoppiamento nome logico/nome fisico in: Sola lettura In Fortran 90 ogni riga del file viene chiamata record Sola scrittura: modalità NEW : il file non esiste, viene creato modalità REPLACE : il file (esistente o no) viene riscritto, cancellando il contenuto vecchio Lettura/scrittura Chiusura di un file: eliminare l accoppiamento. Lettura di dati (in file da cui la lettura è ammessa) Scrittura di dati (in file su cui la scrittura è ammessa) Anche queste operazioni sono indipendenti dal linguaggio di programmazione! Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 5 / 28

Gestire i file con il Fortran 90 Restrizioni Il Fortran 90 consente di associare un nome logico ad un file fisico gestito dal sistema operativo Astrazione dal dispositivo e dalla tecnologia Il file logico viene detto dispositivo logico o anche dispositivo Il nome del dispositivo logico deve essere una costante di tipo INTEGER, che viene chiamata unità I compilatori riservano alcuni numeri a dispositivi standard In questo corso ci occuperemo: Solo file di testo No file in lettura/scrittura Solo file ad accesso sequenziale Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 6 / 28

Gestire i file con il Fortran 90 Apertura di un file L associazione di un dispositivo logico ad un file fisico per la lettura avviene attraverso l istruzione: OPEN(lista open) Occorre specificare le seguenti clausole: UNIT: nome logico (intero non negativo) FILE: nome fisico (stringa di caratteri) STATUS: può assumere i seguenti valori: OLD : sola lettura NEW : sola scrittura; il file non deve esistere, e viene creato REPLACE : sola scrittura esistente o no, il file viene (ri)scritto; SCRATCH : file temporaneo, non viene salvato su disco Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 7 / 28

Gestire i file con il Fortran 90 Apertura di un file (cont.) ACTION: READ o WRITE. IOSTAT: variabile di tipo intero, memorizza eventi particolari: Forma IOSTAT = nome variabile L apertura di un dispositivo fisico e la lettura dei record può generare errori La variabile (IOSTAT) consente di controllare lo stato delle operazioni: Se c è errore nell operazione (ad esempio, un file in lettura non esiste, fine file in lettura record o errore in lettura record) nome variabile /= 0; Se tutto è andato a buon fine: nome variabile == 0; Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 8 / 28

Gestire i file con il Fortran 90 Altre operazioni su file Chiusura: CLOSE(unità) Lettura: READ(unità, formato, variabile iostat) Scrittura: WRITE(unità, formato ) Riposiziona all inizio: REWIND(unità) Record precedente: BACKSPACE(unità) Esempi: INTEGER : : i o s t a t OPEN(UNIT=5, FILE= esempio. tmp, STATUS= NEW, ACTION= WRITE, IOSTAT=i o s t a t ) OPEN(UNIT=12, STATUS= SCRATCH, IOSTAT=i o s t a t ) OPEN(UNIT=8, FILE= d a t i. dat, STATUS= OLD, ACTION= READ, IOSTAT=i o s t a t )... CLOSE( 5 )! c h i u d o i l d i s p o s i t i v o a s s o c i a t o a l l u n i t à 5 READ( 8, ) a, b, c! l e g g o un r e c o r d d e l f i l e d a t i. dat WRITE( 5, ) a! s c r i v o su esempio. tmp l a v a r i a b i l e a REWIND( 8 )! r i t o r n o a l primo r e c o r d d e l d i s p o s i t i v o 8 Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 9 / 28

Esempi di applicazioni Somma di interi da file 1 PROGRAM s o m m a f i l e 2! Questo programma l e g g e un f i l e che c o n t i e n e numeri i n t e r i e ne c a l c o l a l a somma 3! I l f i l e ha nome f i s i c o d a t i. t x t 4! SEZIONE DICHIARATIVA 5 IMPLICIT NONE 6 CHARACTER( 8 ), PARAMETER : : n o m e f i l e = d a t i. t x t! i l nome f i s i c o d e l f i l e 7 INTEGER : : dato! i l dato l e t t o d i v o l t a i n v o l t a 8 INTEGER : : q u a n t i = 0! c o n t a t o r e d e g l i i n t e r i l e t t i 9 INTEGER : : somma = 0! somma d e g l i i n t e r i l e t t i 10 INTEGER : : i s t a t u s! s t a t o I /O 11! SEZIONE ESECUTIVA 12! a p e r t u r a d e l f i l e i n s o l a l e t t u r a 13 WRITE(, ) Leggo d a l f i l e, n o m e f i l e 14 OPEN (UNIT = 9, FILE = nome file, STATUS = OLD, ACTION = READ, IOSTAT = i s t a t u s ) 15 IF ( i s t a t u s == 0) THEN! i l f i l e e s t a t o a p e r t o c o r r e t t a m e n t e 16 DO 17 READ ( 9,,IOSTAT = i s t a t u s ) dato! l e t t u r a d i un dato da f i l e 18 IF ( i s t a t u s /= 0) EXIT! s i e s c e quando i l f i l e e t e r m i n a t o 19 WRITE(, ) dato 20 q u a n t i = q u a n t i + 1 21 somma = somma + dato 22 END DO 23 CLOSE( 9 ) 24 WRITE(, ) I l f i l e e composto d i, q u a n t i, d a t i 25 WRITE(, ) La somma dei d a t i vale, somma 26 ELSE 27! i l f i l e non e s t a t o a p e r t o c o r r e t t a m e n t e 28 WRITE(, ) I l f i l e, n o m e f i l e, non e s i s t e 29 END IF 30 STOP 31 END PROGRAM s o m m a f i l e Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 10 / 28

Righe e caratteri di un file Esempi di applicazioni 1 PROGRAM l e g g i f i l e 2! Questo programma l e g g e un f i l e d i t e s t o e conta d i q u a n t i c a r a t t e r i e quante 3! l i n e e e composto. 4! I l f i l e ha nome f i s i c o i n p u t. t x t! 5 6! I l programma l e g g e una r i g a d e l f i l e p e r o g n i i t e r a z i o n e, immagazzinandola 7! i n una s t r i n g a d i l u n g h e z z a f i s s a t a ( 2 4 0 ). 8! Vengono u s a t i a l c u n i a s p e t t i p e c u l i a r i d e l l e s t r i n g h e : 9! l e t t u r a f o r m a t t a t a con d e s c r i t t o r e d i formato A ( l e g g e t u t t a l a l i n e a ) 10! ( f u n z i o n a anche s e n z a l a f o r m a t t a z i o n e d e l l o p e r a z i o n e d i l e t t u r a ) 11! f u n z i o n e i n t r i n s e c a LEN TRIM ( s ), che r e s t i t u i s c e l a l u n g h e z z a d e l l a s t r i n g a 12! s meno g l i s p a z i v u o t i f i n a l i 13 14! SEZIONE DICHIARATIVA 15 IMPLICIT NONE 16 CHARACTER( 12), PARAMETER : : n o m e f i l e = input. txt 17! i l nome f i s i c o d e l f i l e 18 INTEGER, PARAMETER : : l u n g h e z z a l i n e a = 240 19! l a lunghezza di l i n e a massima ammessa 20 CHARACTER( l u n g h e z z a l i n e a ) : : l i n e a 21! l a l i n e a l e t t a d i v o l t a i n v o l t a 22 INTEGER : : l i n e e = 0! c o n t a t o r e d e l l e l i n e e l e t t e 23 INTEGER : : c a r a t t e r i = 0! c o n t a t o r e d e i c a r a t t e r i l e t t i 24 INTEGER : : i s t a t u s! s t a t o I /O Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 11 / 28

Righe e caratteri di un file(cont.) Esempi di applicazioni 26! SEZIONE ESECUTIVA 27 WRITE(, ) Leggo d a l f i l e, n o m e f i l e 28 OPEN (UNIT = 9, FILE = nome file, STATUS = OLD, ACTION = READ,& 29 &IOSTAT = i s t a t u s ) 30 IF ( i s t a t u s == 0) THEN 31 DO 32 READ ( 9, 1 0 0,IOSTAT = i s t a t u s ) l i n e a! LETTURA d i una l i n e a da f i l e 33 IF ( i s t a t u s /= 0) EXIT 34 WRITE(, ) l i n e a ( 1 : LEN TRIM ( l i n e a ) ) 35 l i n e e = l i n e e + 1 36 c a r a t t e r i = c a r a t t e r i + LEN TRIM( l i n e a ) 37 END DO 38 39 CLOSE( 9 ) 40 WRITE(, ) I l f i l e e composto d i, l i n e e, l i n e e 41 WRITE(, ) e d i, c a r a t t e r i, c a r a t t e r i 42 43 ELSE 44 WRITE(, ) I l f i l e, n o m e f i l e, non e s i s t e 45 END IF 46 100 FORMAT(A) 47 STOP 48 49 END PROGRAM l e g g i f i l e Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 12 / 28

Esempi di applicazioni Copia di un file di testo 1 MODULE o p e r a z i o n i s u f i l e 2 CONTAINS 3 SUBROUTINE c o p i a f i l e ( s o r g e n t e, d e s t i n a z i o n e ) 4! SEZIONE DICHIARATIVA 5 IMPLICIT NONE 6 CHARACTER( l e n = ), INTENT( IN ) : : s o r g e n t e, d e s t i n a z i o n e! nomi f i s i c i d e i f i l e 7! DICHIARAZIONE COSTANTI E VARIABILI LOCALI 8 INTEGER, PARAMETER : : l u n g h e z z a l i n e a = 240! l a massima l u n g h e z z a ammessa 9 CHARACTER( l u n g h e z z a l i n e a ) : : l i n e a! l a l i n e a l e t t a d i v o l t a i n v o l t a 10 INTEGER : : i s t a t u s! s t a t o I /O 11! SEZIONE ESECUTIVA 12 WRITE(, ) Sto c o p i a n d o i l f i l e, s o r g e n t e, n e l f i l e, d e s t i n a z i o n e 13! a p e r t u r a d e l f i l e s o r g e n t e i n l e t t u r a 14 OPEN (UNIT = 9, FILE = sorgente, STATUS = OLD, ACTION = READ, IOSTAT = i s t a t u s ) 15 IF ( i s t a t u s == 0) THEN 16! a p e r t u r a d e l f i l e d e s t i n a z i o n e i n s c r i t t u r a 17 OPEN (UNIT = 10, FILE = destinazione, STATUS = REPLACE, ACTION = WRITE ) 18 DO 19 READ ( 9, 1 0 0,IOSTAT = i s t a t u s ) l i n e a! LETTURA d i una l i n e a da f i l e 20 IF ( i s t a t u s /= 0) EXIT 21 WRITE(10, ) l i n e a ( 1 : LEN TRIM ( l i n e a ) ) 22 END DO 23 CLOSE( 9 ) 24 CLOSE( 1 0 ) 25 ELSE 26 WRITE(, ) I l f i l e, s o r g e n t e, non e s i s t e 27 END IF 28 WRITE(, ) Copia terminata 29 100 FORMAT(A) 30 RETURN 31 END SUBROUTINE c o p i a f i l e Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 13 / 28

Copia di un file di testo(cont.) Esempi di applicazioni 33 SUBROUTINE s t a m p a f i l e ( n o m e f i l e ) 34! SEZIONE DICHIARATIVA 35 IMPLICIT NONE 36! DICHIARAZIONE ARGOMENTI FITTIZI 37 CHARACTER( l e n = ), INTENT( IN ) : : n o m e f i l e! nome f i s i c o d e l f i l e 38! DICHIARAZIONE VARIABILI LOCALI 39 INTEGER, PARAMETER : : l u n g h e z z a l i n e a = 240 40! l a lunghezza di l i n e a massima ammessa 41 CHARACTER( l u n g h e z z a l i n e a ) : : l i n e a 42! l a l i n e a l e t t a d i v o l t a i n v o l t a 43 INTEGER : : i s t a t u s! s t a t o I /O 44! SEZIONE ESECUTIVA 45 OPEN (UNIT = 9, FILE = nome file, STATUS = OLD, ACTION = READ, & 46 &IOSTAT = i s t a t u s ) 47 IF ( i s t a t u s == 0) THEN 48 WRITE(, ) Contenuto d e l f i l e, n o m e f i l e 49 DO 50 READ ( 9, 1 0 0,IOSTAT = i s t a t u s ) l i n e a! LETTURA d i una l i n e a da f i l e 51 IF ( i s t a t u s /= 0) EXIT 52 WRITE(, ) l i n e a ( 1 : LEN TRIM ( l i n e a ) ) 53 END DO 54 CLOSE( 9 ) 55 WRITE(, ) F i n e f i l e, n o m e f i l e 56 ELSE 57 WRITE(, ) I l f i l e, n o m e f i l e, non e s i s t e 58 END IF 59 RETURN 60 100 FORMAT(A) 61 END SUBROUTINE s t a m p a f i l e 62 END MODULE o p e r a z i o n i s u f i l e Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 14 / 28

Formattazione dell input e dell output Stampa in formato libero Stampa in formato libero * come secondo argomento di WRITE(,) (vedere file FORMAT1.F90). Inconvenienti: Molti spazi inutili, Il programmatore non decide quanti siano gli spazi, Inadatta per stampa incolonnata su più righe. INTEGER : : i = 21 REAL : : p i g r e c o = 3.141593 WRITE(, ) i v a l e =, i, ; p i g r e c o v a l e =, p i g r e c o! i v a l e = 2 1 ; p i g r e c o v a l e = 3.14159 Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 15 / 28

Formattazione dell input e dell output Stampa formattata Esempio: WRITE(, 1 0 0 ) i, p i g r e c o 100 FORMAT( i v a l e =, I3, ; p i g r e c o v a l e =, F7. 3 )! i v a l e = 2 1 ; p i g r e c o v a l e = 3. 1 4 2 100: etichetta dell istruzione FORMAT I3: descrittore del formato di un intero in tutto, utilizza 3 caratteri, allineando a destra F7.3: descrittore del formato di un reale in virgola fissa in tutto, utilizza 7 caratteri, di cui 3 dopo il punto e uno per il punto, allineando a destra Note: Arrotondamento del reale stampato, ma non della sua rappresentazione in memoria Necessità dello spazio iniziale nella stringa di FORMAT Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 16 / 28

Formattazione dell input e dell output FORMAT: specifiche alternative Con istruzione FORMAT esplicita: Utile per leggibilità e/o quando deve essere usata almeno due volte Tipicamente: - Tutte insieme alla fine, prima di STOP/RETURN - Singolarmente, dopo il loro primo uso Con stringa costante senza nome: Quando deve essere usata una sola volta Con stringa variabile: - Uso sofisticato, non trattato in questo corso Vedere file FORMAT2.F90 Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 17 / 28

Perchè serve lo spazio all inizio? Formattazione dell input e dell output Bisogna fare riferimento a due concetti Stampante di riga, obsoleta tecnologicamente, ma ancora utile concettualmente Elabora una sola riga da stampare Invia una riga alla stampante Buffer di stampa (buffer di output): formato da: 1 carattere di controllo (il primo); 132 caratteri da stampare (i rimanenti). Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 18 / 28

Il carattere di controllo Formattazione dell input e dell output Valori ammessi per il carattere di controllo (vedere file FORMAT3.F90): CARATTERE SIGNIFICATO 0 Interlinea doppia 1 Salta a nuova pagina + Stampa sulla stessa riga tutti gli altri Stampa normale (compreso SPAZIO) Il carattere di controllo non serve: nel formato libero; nella lettura; nella stampa su file. Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 19 / 28

Formattazione dell input e dell output Carattere di controllo: potenziali problemi INTEGER : : i... i = 21 WRITE(, 1 0 0 ) i!stampa 21 i = 450 WRITE(, 1 0 0 ) i!stampa 50 100 FORMAT( I 3 ) Regola pratica Scrivere sempre il carattere di controllo in modo esplicito nelle istruzioni di formato (vedere file FORMAT4.F90) WRITE(, 2 0 0 ) i!stampa 450 200 FORMAT(, I 3 )!CORRETTA Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 20 / 28

Descrittore I : INTEGER Formattazione dell input e dell output Forma generale riw.m dove r, w ed m sono costanti senza nome di tipo INTEGER (positive) Forme particolari Iw: stampa un intero usando w caratteri (eventuale segno - compreso), allineando a destra Iw.m: come sopra, ma visualizza almeno m cifre oltre -, utilizzando eventualmente degli 0 come cifre più significative riw.m: come la forma precedente, ma con un fattore di ripetizione (formattazione applicata per r volte) Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 21 / 28

Formattazione dell input e dell output Esempi descrittore I (file FORMAT5.F90) i = 12345 WRITE(, 1 0 0 ) i WRITE(, 2 0 0 ) i WRITE(, 3 0 0 ) i, i, i WRITE(, 4 0 0 ) i, i, i 100 FORMAT(, I 2 0 ) 200 FORMAT(, I 2 0. 1 0 ) 300 FORMAT(, 3 I 2 0 ) 400 FORMAT(, 3 I 2 0. 1 0 ) -12345-0000012345 -12345-12345 -12345-0000012345 -0000012345-0000012345 Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 22 / 28

Formattazione dell input e dell output Casi particolari Cosa succede se (vedere file FORMAT6.F90): w è più grande del necessario? Nessun problema: allineamento a destra w è più piccolo del necessario? Stampa w asterischi (Ad esempio, **** ) m è più grande di w? Errore a run-time I dati da stampare non sono interi? Errore a run-time. Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 23 / 28

Formattazione dell input e dell output Casi particolari Cosa succede se (FORMAT7.F90): r è più grande del necessario? Stampa solo gli interi presenti nella WRITE. r è più piccolo del necessario? 1. Stampa i primi r interi presenti nella WRITE sulla stessa riga 2. Poi va a capo e riapplica la FORMAT ai successivi interi presenti nella WRITE Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 24 / 28

Altri descrittori Formattazione dell input e dell output NOTE ALLIN. +--------+------------------------------------------+-----+ REAL rfw.d Virgola fissa D rew.d Virgola mobile, 0.1 <= mantissa < 1.0 D resw.d Virgola mobile, 1.0 <= mantissa < 10.0 D +--------+------------------------------------------+-----+ LOGICAL rlw w >=1 (stampa T o F ) D +--------+------------------------------------------+-----+ CHARACTER raw Stampa w caratteri D ra Stampa tutti i caratteri necessari S +--------+------------------------------------------+-----+ Legenda: r = fattore di ripetizione w = numero di caratteri usati (compresi eventuali., +, -, E ) d = numero di cifre dopo il punto Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 25 / 28

Formattazione dell input e dell output Note sugli altri descrittori w e d sono obbligatori r è opzionale (implicitamente vale 1) per E, ES deve valere w d + 7 w troppo piccolo: F, E, ES stampa w asterischi A stampa i primi w caratteri Vedere file FORMAT8.F90: Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 26 / 28

Formattazione dell input e dell output Altre nozioni su FORMAT Esistono altri descrittori: X, T, /. nx : inserimento di n spazi (non ammesso in Elf90) Tc : permette di raggiungere una specifica posizione del buffer (vai a colonna c ) / : vai a capo È possibile usare parentesi e fattori di ripetizione. Ad esempio (vedere file FORMAT9.F90) in questa maniera stampiamo per 3 volte 3 interi: 100 FORMAT(, 3 ( I1, I2, I 3 ) ) Esercizi: stampa tabella codici ASCII (Soluzione: file ASCII.F90) tavola pitagorica (Soluzione: file TAVOLPI2.F90) Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 27 / 28

Lettura formattata di dati Formattazione dell input e dell output In generale, non c è molta necessità di lettura formattata (la lettura non formattata normalmente va già bene per la maggior parte degli scopi) I concetti sono molto simili a quelli visti per la stampa (WRITE): Buffer di lettura (buffer di input) Non c è il carattere di controllo Descrittori di formato Vedere file FORMAT10.F90 per alcuni casi significativi di lettura di stringhe (descrittore A ) Potenziali errori se i descrittori non sono conformi ai dati da leggere (vedere file FORMAT11.F90) Fortran 90: file e formattazione DIS - Dipartimento di informatica e sistemistica 28 / 28