11. Gestione dei file Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A. 2013-2014.

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Corso di Fondamenti di Programmazione canale E-O
INFORMATICA Altre Istruzioni di I/O
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Gestione dei file Ing. Simona Colucci.
LINGUAGGIO DI PROGRAMMAZIONE C
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
Introduzione al linguaggio C
Operazioni di I/O da console e da file in C standard
SC che operano su file (1)
Anno accademico Input e Output in C. Anno accademico Sommario Input e outputInput e output I flussi di I/O I flussi di I/O Luso.
INFORMATICA I file.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
FILE DATI 16 lunedi 26 luglio giovedi ore 9 Come sappiamo, un file dati è un gruppo di informazioni tra loro correlate, memorizzate in un dispositivo di.
Funzioni definite dall’utente
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 15 Maggio 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
File.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
INFORMATICA I file. © Piero Demichelis 2 File Per rendere più uniforme possibile il comportamento dei programmi in relazione alla grande varietà dei dispositivi.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
1 Gestione dei File Corso di Informatica A Vito Perrone.
File di testo, file binari
Fondamenti di Informatica A - Massimo Bertozzi TIPI DI DATO IN C++ What's in a name? That which we call a rose By any other name would smell as sweet.
I File.
Le funzioni.
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
File ad accesso casuale o random
Creazione progetto in C++/DEV
Le strutture dati dinamiche
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione X Ingresso/Uscita di Interi Programmazione di Calcolatori: Ingresso/Uscita 1.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Esercizi su File.
Gestione dei file di testo, matrici e struct
2000 Prentice Hall, Inc. All rights reserved. Capitolo 11 (Deitel) Lelaborazione dei file Sommario Introduzione La gerarchia dei dati 11.3.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
File binari Accesso a file con record di lunghezza costante Struct Persona { Int id; Char nome[50];// nome e cognome Double stipendio; }; Persona dipendente;
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
Fondamenti di Informatica L- A #include “mylib.h” int leggi(int a[], int dim) { int i=0; while( scanf("%d", a+i) ) { i++; if( i>=dim ) break; } return.
Capitolo 14 Diapositiva 1 Linguaggio C – Guida alla programmazione 2/ed – A. Bellini, A. Guidi Copyright © The McGraw-Hill Companies srl Archiviare.
8. Funzioni e procedure Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
9. Funzioni e procedure Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Risoluzione esercizi Informatica - CDL in Ingegneria Industriale- A.A
Risoluzione esercizi. 3 PROGRAMMAZIONE STRUTTURATA Informatica - CDL in Ingegneria Industriale- A.A
11. Gestione dei file Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Esercizi su stringhe e file 15 Stringhe e file.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 6 Marzo 2016.
APPUNTI SUL LINGUAGGIO C Memoria secondaria: File
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

11. Gestione dei file Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A

Indice Il file system in C Principali operazioni sui file (dalla Standard Library) Esempi Informatica - CDL in Ingegneria Industriale- A.A

Il file system in C La gestione dei file in C avviene tramite un flusso di comunicazione: –Dichiarazione di una variabile di tipo puntatore al file(ad un oggetto di tipo FILE), che costituirà il riferimento al file per tutto il tempo di apertura del flusso –Apertura del flusso tramite una funzione di libreria(fopen) –Chiusura del flusso tramite una funzione di libreria(fclose) Classificazione del flusso di comunicazione: –binario : sequenza di byte –di tipo testo : sequenza di caratteri suddivisa in linee terminate dal carattere di newline Informatica - CDL in Ingegneria Industriale- A.A

Il tipo strutturato FILE Capace di memorizzare tutte le informazioni necessarie a controllare un flusso Possibili campi: Modalità di utilizzo: lettura, scrittura o lettura e scrittura; Posizione corrente: punta al prossimo byte da leggere o scrivere sul file; Indicatore di errore: registra il presentarsi di un errore di lettura o scrittura Indicatore di end-of-file (eof). Dichiarazione di variabile: FILE *fp Informatica - CDL in Ingegneria Industriale- A.A

Tabella file aperti Il sistema operativo gestisce una tabella dei file aperti: FILE TabellaFileAperti[MaxNumFileGestibili] E’ un vettore che memorizza le informazioni relative alle modalità di utilizzo dei singoli file L’apertura di un flusso provoca: –la creazione di un nuovo elemento nella tabella con tutte le informazioni del file aperto –La restituzione alla variabile puntatore definita nel programma C l’indirizzo di tale tabella L’utente provoca la manipolazione indiretta della struttura di tipo file tramite le funzioni di libreria stdio.h, ma solo il sistema operativo manipola i campi Informatica - CDL in Ingegneria Industriale- A.A

I flussi standard Automaticamente aperti quando inizia l’esecuzione di un programma: –stdin: associato al file che rappresenta la tastiera del terminale –stdout: associato al file che rappresenta il video del terminale –stderr: associato al file che rappresenta il video del terminale Sono le variabili puntatore ai descrittori dei file associati con le periferiche, come visto nella macchina di Von Neumann Esempio: –printf scrive sul file puntato da stdout –scanf legge dal file puntato da stdin Informatica - CDL in Ingegneria Industriale- A.A

Operazioni di gestione dei file FILE*fopen (nomefile,modalità) modalita possibili: - r: lettura in modalità testo, posizionamento inizio file - w: scrittura in modalità testo, posizionamento inizio file - a: scrittura in modalità testo, posizionamento fine file - rb, wb, ab: r, w, a, in modalità binaria - r+,w+,a+, rb+, wb+, ab+: lettura e scrittura su file con modalità di testo o binaria intfclose (FILE *fp) Pone pari a NULL il valore di fp, restituisce 0 o EOF in caso di errori intremove ( nomefile ) intrename (vecchionome,nuovonome) Restituiscono 0 in caso positivo, un valore diverso in caso contrario Informatica - CDL in Ingegneria Industriale- A.A

Operazioni di gestione degli errori Nella struttura di gestione di un file aperto sono presenti: Un’informazione che tenga traccia della presenza di un errore –intferror (FILE*fp) Un’informazione che dice se si è giunti alla fine del file: –intfeof (FILE*fp) La possibilità di ripristinare nei campi i valori di default prima dell’errore: –voidclearerr (FILE*fp) Informatica - CDL in Ingegneria Industriale- A.A

Operazioni di lettura e scrittura Lettura e scrittura formattata: si precisa il formato dei dati da manipolare Lettura e scrittura di caratteri: accesso per caratteri Lettura e scrittura di stringhe: accesso per linee Lettura a scrittura di strutture: acceso per blocchi Informatica - CDL in Ingegneria Industriale- A.A

Lettura e scrittura formattata int printf (stringa di controllo, elementi) int scanf (stringa di controllo, indirizzo elementi) int fprintf (FILE *fp, stringa di controllo, elementi) int fscanf (FILE *fp, stringa di controllo, indirizzo elementi) Informatica - CDL in Ingegneria Industriale- A.A

Lettura e scrittura per caratteri int getchar (void) int putchar(int c) int getc(FILE *fp) int fgetc (FILE *fp) int putc (int c, FILE *fp) int fputc (int c, FILE *fp) Informatica - CDL in Ingegneria Industriale- A.A

Lettura e scrittura per stringhe char *gets(char *s) int fgets (char *s, int n, FILE *fp) int puts (char *s) int fputs (char *s, FILE *fp) Informatica - CDL in Ingegneria Industriale- A.A

/*Legge e mostra sul video il contenuto del file di testo filechar*/ #include /* Contiene la definizione di EOF, del tipo FILE e le testate delle funzioni che operano su file */ #include /* Contiene la definizione di NULL */ main() { FILE*fp; charc; if ((fp = fopen("filechar", "r")) != NULL) /* Il file viene aperto in lettura con modalità testo */ { while ((c = fgetc(fp)) != EOF) /* Viene letto e stampato un carattere per volta sino a fine file */ putchar(c); fclose(fp); } else printf("Il file non può essere aperto\n"); } Esempi con file di testo (1)

Informatica - CDL in Ingegneria Industriale- A.A /*Lettura e scrittura di stringhe (1)*/ #include #defineOK1 #defineERROR0 #defineMAXLINE100 int copiaselettiva(char refstr[]) { charline[MAXLINE]; FILE*fin, *fout; If ((fin = fopen("filein", "r")) == NULL) /* filein viene aperto in lettura con modalità testo */ return ERROR; if ((fout = fopen("fileout", "w")) == NULL) /* fileout viene aperto in scrittura con modalità testo */ { fclose(fin); return ERROR; } … Esempi con file di testo (2)

Informatica - CDL in Ingegneria Industriale- A.A /*Lettura e scrittura di stringhe (2)*/ … while (fgets(line,MAXLINE,fin) != NULL) /* fgets legge da filein al più MAXLINE–1 caratteri e assegna al vettore line i caratteri letti, incluso l'eventuale carattere di newline, e termina la stringa con il carattere \0 */ if (strstr (line,refstr) != NULL) /* La funzione strstr restituisce la posizione della prima occorrenza della stringa puntata da refstr nella stringa puntata da line; se la seconda stringa non è contenuta nella prima viene restituito il valore NULL */ fputs(line,fout); fclose(fin); fclose(fout); return OK; } Esempi con file di testo (3)

Lettura e scrittura di strutture Informatica - CDL in Ingegneria Industriale- A.A int fread(void *ptr, dimelemento, numelementi, FILE *fp); int fwrite(void *ptr, dimelemento, numelementi, FILE *fp);

Informatica - CDL in Ingegneria Industriale- A.A /*Gestione file Persone (1)*/ typedefstruct{charnome[20]; charcognome[20]; charindirizzo[50]; } Persona; typedefcharCodFisc[16]; typedefstruct{charnome[20]; charcognome[20]; charindirizzo[50]; CodFiscCodiceFiscale; } NuovaPersona; /* I file Persone, CodiciFiscali e Nuove Persone si suppongono aperti dal main. pp, cf e np fanno riferimento ai tre file in questione */ intAggiornaPersone (FILE *pp, FILE *cf, FILE *np) { PersonaPersonaCorrente; CodFiscCodFiscCorrente; NuovaPersonaNuovaPersonaCorrente; … Esempio con file binario (1)

Informatica - CDL in Ingegneria Industriale- A.A … /*Gestione file Persone (2)*/ rewind(pp); /* Rende possibile le seguenti operazioni di lettura e scrittura sul file identificato da pp, iniziando dal primo byte del file.*/ rewind(cf); rewind(np); while (fread(&PersonaCorrente,sizeof(Persona),1,pp) != 0) /* Finché non si è raggiunta la fine del file */ { fread(&CodFiscCorrente,sizeof(CodFisc),1,cf); strcpy(NuovaPersonaCorrente.nome, PersonaCorrente.nome); strcpy(NuovaPersonaCorrente.cognome,PersonaCorrente.cognome); strcpy(NuovaPersonaCorrente.indirizzo, PersonaCorrente.indirizzo); strcpy(NuovaPersonaCorrente.CodiceFiscale, CodFiscCorrente); fwrite(&NuovaPersonaCorrente,sizeof(NuovaPersona),1,np); } Esempio con file binario (2)

Accesso diretto Consente di accedere direttamente ai byte specificati all’interno del file tramite le funzioni: int fseek(FILE *fp, long offset, int refpoint) Refpoint: –SEEK_SET : scostamento rispetto all’inizio del file, –SEEK_CUR : scostamento rispetto alla posizione corrente, –SEEK_END : scostamento rispetto alla fine del file. long ftell(FILE *fp) rewind(f) equivale a: fseek (f, 0, SEEK_SET); Informatica - CDL in Ingegneria Industriale- A.A

Accesso diretto (2) /*Inversione del contenuto di un file numint di interi (1)*/... main () { FILE*f; long int inizio, fine; inttempi, tempf; unsigned intdim; if ((f = fopen ("numint", "rb+")) == NULL) { puts ("Non è stato possibile aprire il file numint"); /* più efficiente della printf per la stampa di un messaggio dato che non richiede la scansione e l’interpretazione della stringa di controllo */ exit(1); /* La funzione exit provoca una conclusione non anomala del programma e la restituzione del controllo al sistema operativo */ } … Informatica - CDL in Ingegneria Industriale- A.A

Accesso diretto (3) /*Inversione del contenuto di un file numint di interi (2)*/... inizio = 0; dim = sizeof(int); fseek (f, –dim, SEEK_END); /* SEEK_END è una costante definita nel file stdio.h. Ha valore 2 */ fine = ftell (f); while (inizio < fine) { fseek (f, inizio, SEEK_SET); fread (&tempi, dim, 1, f); fseek (f, fine, SEEK_SET); fread (&tempf, dim, 1, f); /* È necessario riposizionarsi */ fseek (f, fine, SEEK_SET); fwrite (&tempi, dim, 1, f); fseek (f, inizio, SEEK_SET); fwrite (&tempf, dim, 1, f); inizio = inizio + dim; fine = fine – dim; } Informatica - CDL in Ingegneria Industriale- A.A

Esempi in classe 1. Un'azienda di traslochi ha necessità di gestire le informazioni relative ai traslochi effettuati. Ogni trasloco è caratterizzato da un nome del cliente, un cognome, una data, un indirizzo di origine, un indirizzo di destinazione, l'eventuale necessità di una scala automatica, il costo. Tutti i traslochi sono memorizzati nel file "traslochi.dat", che si suppone già caricato. Si progetti tramite flow chart strutturato un programma che consenta la scelta tra le seguenti opzioni: - Calcolo della percentuale di traslochi effettuati con scala automatica - Ordinamento dei traslochi per costo crescente PER OGNI OPZIONE E' OBBLIGATORIO l'USO DI SOTTOPROGRAMMI [Vedere il file 30_11_10.c e 30_11_10.ppt nella cartella Esempi file.zip] Informatica - CDL in Ingegneria Industriale- A.A

Esercizi 1. Una piccola azienda di servizi deve gestire le informazioni relative ai propri clienti, che sono a loro volta aziende caratterizzate da partita IVA, ragione sociale (nome azienda), Codice Fiscale del rappresentante legale, numero di dipendenti. Si progetti tramite flow-chart strutturato un programma che offra all'azienda le seguenti funzionalità: - Inserimento di un nuovo cliente nel file "clienti.dat“ - Ordinamento dei clienti in base alla ragione sociale -Ricerca del rappresentante legale di una data azienda, di cui viene passata la partita IVA -Modifica del numero di dipendenti di un'azienda data, di cui viene passata la partita IVA

Esercizi 2. Una compagnia per il trasporto su strada deve gestire le informazioni relative alla propria flotta di autobus. Ogni autobus è caratterizzato da una targa, un numero di posti a sedere, una capienza massima (che include anche i posti in piedi), l'eventuale presenza anche contemporanea dei seguenti optionals: tv, servizi igienici e frigorifero. Si progetti tramite flow-chart strutturato un programma che: - Consenta l'inserimento di un nuovo autobus nel file "flotta.dat" - Consenta di modificare, data una targa, le informazioni relative ai tre tipi di optionals quando uno di essi viene aggiunto - Consenta di visualizzare, dato un numero di passeggeri che si vuole ospitare e degli optional desiderati, i numeri di targa relativi agli autobus che soddisfano i requisiti(numero di posti a sedere maggiore dei passeggeri da ospitare e optional desiderati inclusi) Si scriva il programma che codifica in linguaggio C il progetto Informatica - CDL in Ingegneria Industriale- A.A

Esercizi 3. Un commercialista deve gestire il proprio archivio di clienti, contenuto in un file ("clienti.dat"). Ogni cliente è dotato di un nome, un codice fiscale, un tipo(che indica se si tratta di persona fisica o giuridica), un compenso mensile che versa al commercialista per la gestione della propria contabilità. Si progetti tramite flow chart strutturato un programma che consenta la scelta tra le seguenti opzioni: -Inserimento di un nuovo cliente nel file - Calcolo del compenso totale ricevuto dalle persone fisiche -Calcolo del compenso totale ricevuto dalle persone giuridiche -Modifica del compenso percepito da un cliente, individuato dal codice fiscale -Visualizzazione dei dati del cliente che fornisce al commercialista il compenso più alto Informatica - CDL in Ingegneria Industriale- A.A

Esercizi 4. Una società che organizza eventi per bambini necessita di un programma per gestire le informazioni relative a tali eventi. Ogni evento è caratterizzato da un tipo (che può essere Battesimo, Prima Comunione, Compleanno, Cresima), una data, un luogo, un'ora, il codice fiscale di un genitore e il costo. Si progetti tramite flow-chart strutturato un programma che consenta la scelta tra le seguenti opzioni: -Inserimento di un nuovo evento in un file, Eventi.dat, secondo le seguenti condizioni: oL'inserimento deve avvenire solo se non esiste già nel file un evento che ha la stessa data, ora e luogo; oNel caso in cui esista già nel file un evento che ha la stessa data, ora e luogo, il programma deve dare all'utente la possibilità di fornire dei nuovi valori per data, ora e luogo e poi procedere con l'inserimento; -Calcolo del costo medio dell'evento, dato il tipo come parametro dall'utente. Informatica - CDL in Ingegneria Industriale- A.A