Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A. 2011-2012 10. Gestione dei file Ing. Simona Colucci.

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Corso di Fondamenti di Programmazione canale E-O
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
Uso avanzato di 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
PHP e i files Laboratorio di Progettazione Web AA 2009/2010 Chiara Renso ISTI- CNR -
Operazioni di I/O da console e da file in C standard
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture di controllo Ing.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Strutture di controllo Ing. Simona Colucci.
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.
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.
Introduzione agli stream e alle classi
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.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Strutture di controllo nel C
Strutture di controllo in C -- Flow Chart --
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 I record.
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.
Esercizi su File.
Esercizi su File e Liste
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.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
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 -
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
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.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
11. Gestione dei file Ing. Simona Colucci 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)
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.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Gestione dei file Ing. Simona Colucci

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Indice Il file system in C Principali operazioni sui file (dalla Standard Library) Esempi

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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 Lapertura 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 lindirizzo di tale tabella Lutente provoca la manipolazione indiretta della struttura di tipo file tramite le funzioni di libreria stdio.h, ma solo il sistema operativo manipola i campi

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A I flussi standard Automaticamente aperti quando inizia lesecuzione 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

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Operazioni di gestione degli errori Nella struttura di gestione di un file aperto sono presenti: Uninformazione che tenga traccia della presenza di un errore –intferror (FILE*fp) Uninformazione che dice se si è giunti alla fine del file: –intfeof (FILE*fp) La possibilità di ripristinare nei campi i valori di default prima dellerrore: –voidclearerr (FILE*fp)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Lettura e scrittura di strutture int fread(void *ptr, dimelemento, numelementi, FILE *fp); int fwrite(void *ptr, dimelemento, numelementi, FILE *fp);

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - 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)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Accesso diretto Consente di accedere direttamente ai byte specificati allinterno del file tramite le funzioni: int fseek(FILE *fp, long offset, int refpoint) Refpoint: –SEEK_SET : scostamento rispetto allinizio 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);

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A /*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 linterpretazione della stringa di controllo */ exit(1); /* La funzione exit provoca una conclusione non anomala del programma e la restituzione del controllo al sistema operativo */ } … Accesso diretto (2)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A /*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; } Accesso diretto (3)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A /* Programma ServizioVoli (1)*/ voidmain () { [dichiarazioni varie: esse dovranno definire le variabili necessarie per far riferimento ai file che memorizzano l'archivio, le varie funzioni destinate alla sua gestione in relazione alle operazioni richieste, le variabili e i tipi associati all'archivio e le variabili e tipi necessari per la realizzazione del menu] Fine = false; do { [RipulisciLoSchermo] puts ("\nSono disponibili le seguenti operazioni. Per selezionare un'operazione premere il tasto indicato alla destra dell'operazione e il carattere di Invio.\n"); /* Ricordiamo che puts inserisce dopo la stringa un newline ottenendo l'andata a capo */ puts ("Prenotazione volo: P"); puts ("Cancellazione di una prenotazione:C"); puts ("Inserimento in lista di attesa:A"); puts ("Fine operazioni:F"); Risposta = getchar (); … Programma Servizio Voli (1)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A /* Programma ServizioVoli (2)*/ … Risposta = getchar (); switch (Risposta) { case'P': ServiPrenotazioni(); break; case'C': ServiCancellazioni(); break; case'A': ServiListaAttesa(); break; case'F': Fine = true; break; } } while (Fine == false); [RipulisciLoSchermo] puts ("\n\n\nArrivederci\n"); } Programma Servizio Voli (2)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A /* Programma ServizioVoli (3)*/ #defineMAXPOSTI350 typedefstruct{charCognome[30]; charNome[30]; } Passeggero; typedefstruct{intNumVolo; charData[10]; PasseggeroPrenotazioni[MAXPOSTI]; PasseggeroListaAttesa[100]; } DescrizioneVolo; Programma Servizio Voli (3)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A /* Programma ServizioVoli (4)*/ booleanFine; charRisposta; /* Puntatore al descrittore del file ArchivioVoli */ FILE*av; voidServiPrenotazioni (void); /* Esegue, se possibile, la prenotazione richiesta. In caso contrario, chiede automaticamente all'utente se desidera essere messo in lista di attesa. Se la risposta è positiva, chiama la funzione ServiListaAttesa senza bisogno di ritornare al menu principale. Dopo l'esecuzione della funzione ServiListaAttesa, termina anche la ServiPrenotazioni. L'esecuzione della funzione comporta l'interazione con l'utente attraverso un opportuno menu in cui vengono chiesti all'utente il numero e la data del volo desiderato, il cognome e il nome del passeggero. Dopo aver ottenuto i dati richiesti la funzione accede all'archivio e provvede alle necessarie operazioni di interrogazione e aggiornamento */ … Programma Servizio Voli (4)

Sistemi Informativi DEE - Politecnico di Bari Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A /* Programma ServizioVoli (5)*/ … voidServiCancellazioni (void); /* Vengono chiesti, tramite opportuno menu, i dati del passeggero e l'identificazione del volo al quale si intende rinunciare. Viene cancellato il passeggero dalla relativa lista. Inoltre, se la lista d'attesa del volo non è vuota, si estrae il suo primo elemento e lo si inserisce nella lista delle prenotazioni. Viene quindi scritto un messaggio sul terminale che avvisa l'operatore che un elemento della lista d'attesa ha ora la sua prenotazione confermata */ voidServiListaAttesa(void); /* Vengono chieste le solite informazioni e viene inserito il passeggero nella lista d'attesa desiderata */ Programma Servizio Voli (5)