Sei sulla pagina 1di 16

Files in C++

Fondamenti di Informatica
R. Basili
a.a. 2006-2007
Sintesi
Motivazioni
Definizione di file in C++
Un esempio
Uso dei file
Esempi
Esercizi
Motivazioni
il programma in esecuzione legge
(sequenzialmente) una sequenza di
caratteri prodotti "al volo" dall'utente
(tramite tastiera)
il programma in esecuzione scrive
(sequenzialmente) una sequenza di
caratteri sullo schermo (o stampante)
problema:
dati in ingresso e risultati prodotti sono
"volatili
si potrebbe voler conservare i risultati prodotti
(per usi futuri)
si potrebbe voler conservare i dati in ingresso
(per poterli riutilizzare in una nuova
esecuzione, .)
File
Un File "insieme di dati" organizzati
secondo una certa struttura, identificato da
un nome, e memorizzato in memoria
secondaria
Noi considereremo solo file di caratteri
sequenza di caratteri (stampabili e "di
controllo")
(altre possibilit: file binari, tipo immagine, .)
file di caratteri:
costruito dall'utente usando un editore di testi
prodotto da un programma in esecuzione (p.es.
risultati di un programma C++)
Esempio di file
esempio gi noto: il file che contiene il
testo di un programma C++

int<spazi o>main()<eoln>
{<eoln>
<tab>char<spazi o>ch;<eoln>
<tab>ch=X;<eoln>
<tab>cout<spazi o><<<spazi o>ch;<eoln>
}<eoln>
<eof>
Caratteri
Di controllo
Files in C++: dichiarazione
Gestione dell'ingresso/uscita su file in un
programma C++:
(1) includere la libreria <fstream>
(2) dichiarare (una o pi) variabili di "tipo
file (es. fstream file_dati; )
tipi consentiti:
ifstream: variabile file di sola lettura
ofstream: variabile file di sola scrittura
fstream: variabile file di lettura/scrittura
(3) associare una variabile di tipo file a un
oggetto di tipo file (tramite la funzione
open())
(es. file_dati.open(c:\Dati00.txt);
Files in C++: Accesso
(4) L'accesso ad un file consente di
leggere e/o scrivere su file. Si utilizzano i
normali comandi >> e << su una variabile
di tipo file (analogamente a cin e cout)
OSS: >> si pu usare con una variabile di
tipo lettura (ifstream), << con una
variabile di tipo scrittura (ofstream)
(5) al termine dell'uso di una variabile di
tipo file, questa va "chiusa" usando la
funzione close()
Files in C++: Apertura/chiusura
All'apertura viene assegnato alla variabile
fstream uno specifico File del SO
ad esempio: c:\Dati00.txt
OSS:
se un file non viene "chiuso" esplicitamente, viene
chiuso automaticamente quando il programma
termina
una variabile di tipo file pu essere aperta,
chiusa, riaperta, .., pi volte in uno stesso
programma
Esempio
#include <iostream>
#include <fstream>
int main() {
int i, j, k; char ch;
ifstream inFile; //dichiarazione file sola lettura
inFile.open("dati.txt");// associa inFile al
// file dati.txt
inFile >> i >> j >> ch;
inFile.close(); /* "chiusura" del file */
cout<<i<<' '<<j<<' '<<ch; //scrive su schermo i
//valori letti
}
Risultato: 15 5 Q
15bb5bQ<eoln>
<eof>
"dati.txt"
MEMORIA
"esempio.cpp"

"dati_1"

b sta per blank,<spazio>


Fine del file (eof())
Errore comune:
tentativo di leggere oltre il carattere <eof>:
Esempio: si verificherebbe, con dati.txt, se
il comando di lettura fosse:
inFile >> i >> j >> ch >> k;
Risultato:
la variabile inFile entra in uno stato fail,
I tentativi successivi di leggere da inFile
vengono ignorati
La stampa dei valori di i, j, ch come prima, la
stampa di k risulta "spazzatura
Scrittura di un File in C++
I file possono essere usati per
preservare i risultati di un
programma oltre il termine della
sua esecuzione
Esempio di scrittura su file
Esempio:
Programma: sudoku FILES
Risultati: SudokuResults.Dat
Scansione di un file
La condizione di failure (fail) nello stato
di una variabile di tipo file pu essere
usata per leggere il file dallinizio sino
alla sua fine
Questa operazioni si dice scansione
completa di un file (File scan)
Esempi:
File dei dati di un problema numerico (max di una
sequenza di numeri)
Elenchi di record
File di testo
Scansione di un file
Esempio: gestione di una rubrica
La rubrica viene conservata (tra due
esecuzioni dello stesso programma)
in memoria secondaria (File:
Rubrica.dat)
Progetto Dev C++
Esercizi Proposti
Progettare una programma che generi un
file (utilizzare il generatore di numeri
pseudo-casuali) per la rappresentazione di
un insieme di 90 numeri (<100 come nel
gioco del lotto)
Progettare un programma/funzione che
utilizzi il file dellesercizio precedente
per leggere i numeri del lotto, e che, data
una coppia di numeri verifichi se questa
corrisponde ad un ambo.
Esercizi proposti (2)
Progettare una struttura dati per la
rappresentazione di un mazzo di (40 o) 54
carte.
Scrivere una funzione che generi il mazzo
in modo da ottenere una sequenza casuale
di carte (mescolate)
Scrivere una funzione che date 5 carte
verifichi la presenza di
Un tris
Un poker
Una scala
Una scala reale
Esercizi (3)
Dato il programma per la gestione di una
rubrica, modificarlo per gestire un elenco
di studenti ed esami. Si utilizzino almeno
due file diversi, uno per gli studenti ed
uno per gli esami effettuati (stessi indici
per gli studenti)
Il programma dovr consentire di:
Inserire nuovi studenti
Inserire i risultati di nuovi esami effettuati dagli
studenti presenti nellelenco
Stampare tutti gi esami eseguiti da uno studente
e la relativa media
Stampare tutti gli studenti che hanno eseguito
un certo esame

Potrebbero piacerti anche