Gestione dei file. File di testo e binari

Documenti analoghi
Gestione dei File in C

Scrittura formattata - printf

Linguaggio C: i file

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Gestione dei File. dischi nastri cd

I files in C. A cura del prof. Ghezzi

Esercizio 1 (15 punti)

Esercizio 1 (15 punti)

Consideriamo un vettore allocato dinamicamente

Puntatori. Un puntatore contiene un numero che indica la locazione di memoria dove è presente la variabile puntata

Fondamenti di Informatica T. Linguaggio C: File

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

File e puntatori a file

Programmazione C Massimo Callisto De Donato

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Struttura dati FILE. Concetto di FILE

File binari e file di testo

Fondamenti di Informatica

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

Librerie C. Corso di Linguaggi e Traduttori 1 AA Corso di Linguaggi e Traduttori 1 AA stdio.h

Matlab: Gestione avanzata dei file

Gestione di files Motivazioni

I File. Consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centarle.

Esercizio 1 Liste: calcolo perimetro di un poligono

Unità Didattica 5 Linguaggio C. Stringhe. Accesso a file ASCII. Strutture.

Input/output in C e in C++

Esercizi. Stringhe. Stringhe Ricerca binaria

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Esercitazione 11. Liste semplici

Linguaggio C La libreria standard

Lab 10 Gestione file di testo

Esercitazione 12. Esercizi di Ricapitolazione

GESTIONE DEI FILE IN C

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

per leggere caratteri: getchar(void); Laboratorio di linguaggi

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

C: panoramica. Violetta Lonati

I puntatori e l allocazione dinamica di memoria

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

puntatori Lab. Calc. AA 2007/08 1

Transcript:

Gestione dei file Un file e definito come un oggetto, presente nel file system, costituito da una sequenza continua di bytes Un file, per poter essere utilizzato, deve essere aperto Successivamente e possibile leggere il file e/o scrivere nuovi contenuti Dopo l apertura, il puntatore di lettura/scrittura e posizionato all inizio del file Il puntatore di lettura/scrittura e spostato in avanti a seguito di operazioni di lettura e scrittura. Lo spostamento e funzione del numero di byte letti o scritti. 1 File di testo e binari In funzione del tipo di contenuto di un file, distinguiamo: file di testo file binari contengono caratteri stampabili e informazioni interpretabili da un umano contengono dati di vario genere (mix di caratteri stampabili e non) File di testo 48 45 4C 4C 4F 0A H E L L O \n File di binario 00 04 CC 36 4E FC 2 1

Apertura: Uso dei file (apertura/chiusura) FILE * fopen (char * pathname, char * mode) pathname: mode: percorso completo del file da aprire modalita di apertura r lettura w creazione e scrittura r+ lettura e scrittura (file gia esistente) w+ creazione, lettura e scrittura a scrittura in append (alla fine del file) b file binario (se non specificato e un file di testo) Chiusura: int fclose (FILE * f) 3 Uso dei file di testo (lettura/scrittura) Scrittura: int fprintf (FILE *f, char * format, ) Lettura: int fscanf (FILE *f, char * format, ) Stessa modalita di funzionamento di printf e scanf 4 2

Uso dei file di testo, esempio f = fopen ( dati.txt, w ); // creazione e apertura in scrittura fprintf (f, %d\n, dati [i]); // scrittura dei dati 5 Uso dei file di testo, esempio f = fopen ( dati.txt, r ); // apertura in lettura fscanf (f, %d, & dati [i]); // lettura dei dati 6 3

File di testo dati [0] = 5 dati [1] = 10 dati [2] = 4 dati [3] = 43 dati [4] = 7 File dati.txt 35 0A 31 30 0A 34 0A 34 33 0A 38 0A 5 \n 1 0 \n 4 \n 4 3 \n 8 \n File dati.txt aperto con il blocco note 7 Uso dei file di binari (lettura/scrittura) La scrittura/lettura avviene specificando il puntatore al blocco di dati da leggere/scrivere e la dimensione dei dati da leggere/scrivere Scrittura: int fwrite (void * ptr, int size, int num, FILE *f) Lettura: int fread (void * ptr, int size, int num, FILE *f) ptr puntatore al blocco di dati da trasferire size dimensione di ogni blocco dati num numero di blocchi da trasferire f file su cui leggere/scrivere (precedentemente aperto) valore di ritorno: numero dei blocchi trasferiti 8 4

Uso dei file binari, esempio f = fopen ( dati.bin, wb ); // creazione e apertura in scrittura // file binario fwrite (& dati[i], sizeof (int), 1, f); // scrittura dei dati 9 File binari - fwrite fwrite (& dati[i], sizeof (int), 1, f); Puntatore all area di memoria che contiene i dati da trasferire Dimensione (in byte) dei dati da trasferire (trasferiamo un elemento del vettore, quindi un intero) Numero di elementi da trasferire (trasferiamo un solo elemento del vettore) File su cui scrivere Scrivere l intero vettore fwrite (& dati[0], sizeof (int), VECTOR_SIZE, f); 10 5

Uso dei file binari, esempio f = fopen ( dati.bin, rb ); // apertura in lettura // file binario fread (& dati[i], sizeof (int), 1, f); // lettura dei dati 11 File binari dati [0] = 5 dati [1] = 10 dati [2] = 4 dati [3] = 43 dati [4] = 7 Ogni elemento (numero intero) occupa 4 byte File dati.bin 05 00 00 00 0A 00 00 00 04 00 00 00 2B 00 00 00 elemento 0 elemento 1 elemento 2 elemento 3 12 6

Gestione dell end-of-file fread (& dati[i], sizeof (int), 1, f); fscanf (f, %d, & dati[i]); C e un loop che dice quanti elementi occorre leggere Stiamo dunque supponendo che il numero di elementi del file sia noto a priori Se questo numero non e noto, occorre leggere il file fino alla sua fine Occorre dunque sapere quanto abbiamo raggiunto la fine del file. La funzione: int feof (FILE * f) restituisce 1 se abbiamo raggiunto la fine del file f, 0 altrimenti 13 File binari: gestione dell eof f = fopen ( dati.bin, rb ); // apertura in lettura // file binario i = 0; while (!feof (f)) { fread (& dati[i], sizeof (int), 1, f); // lettura dei dati i++; 14 7

File binari: gestione dell eof Implementazione corretta f = fopen ( dati.bin, rb ); // apertura in lettura // file binario i = 0; while (fread (& dati[i], sizeof (int), 1, f) == 1) { // lettura e controllo i++; 15 File di di testo: gestione dell eof Implementazione corretta f = fopen ( dati.bin, r ); // apertura in lettura i = 0; while (fscanf (f, %d,& dati[i]) == 1) { // lettura e controllo i++; 16 8

Case-Study: una rubrica telefonica #include <string.h> #define FILENAME "rubrica.bin" typedef struct { char cognome [40]; char nome [40]; char telefono [30]; t_elemento_rubrica; 17 Case-Study: una rubrica telefonica int main (int argc, char * argv[]) { int choice; do { printf ("0- Fine\n"); printf ("1- Inserisci nominativo\n"); printf ("2- Cerca nominativo\n"); scanf ("%d", &choice); switch (choice) { case 1: insert_name (); break; case 2: search_name (); break; while (choice!= 0); 18 9

Case-Study: una rubrica telefonica void insert_name (void) { t_elemento_rubrica e; printf ("Cognome :"); scanf ("%s", e.cognome); printf ("Nome :"); scanf ("%s", e.nome); printf ("Telefono:"); scanf ("%s", e.telefono); f = fopen (FILENAME, "ab"); // append = apertura in scrittura alla // fine del file printf ("Errore di apertura del file.\n"); fwrite (&e, sizeof (t_elemento_rubrica), 1, f); 19 Case-Study: una rubrica telefonica void search_name (void) { char cognome [40]; t_elemento_rubrica e; printf ("Inserisci il cognome da cercare :"); scanf ("%s", cognome); f = fopen (FILENAME, "rb"); printf ("Errore di apertura del file.\n"); while (fread (&e, sizeof (t_elemento_rubrica), 1, f) == 1) { if (strcmp (e.cognome, cognome) == 0) { printf ("Cognome : %s\n", e.cognome); printf ("Nome : %s\n", e.nome); printf ("Telefono : %s\n", e.telefono); 20 10

ESERCIZIO SULLE CODE + FILES Realizzare un sistema informatico che consenta di smistare l accesso agli sportelli di una segreteria studenti. Si supponga la presenza di tre sportelli e si consideri la seguente operativita : 1. Lo studente inserisce i propri dati (cognome, nome e numero di matricola) 2. Il sistema sceglie lo sportello con minor gente in fila e accoda lo studente 3. Lo studente riceve dal sistema l informazione sul numero di sportello sul quale egli e stato accodato ed il numero di persone che si trovano in coda a quello sportello. 4. Ogni addetto allo sportello interroga il sistema per sapere il prossimo studente da servire e per conoscere il numero di studenti in fila davanti al suo sportello. 5. All orario di chiusura, deve essere possibile registrare lo stato delle code in modo da ripristinare i turni nel giorno successivo Corrado Santoro Laboratorio di Informatica Lezione 9 CdS Ing. Informatica Universita di Catania 21 11