I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002
|
|
|
- Raffaello Lolli
- 10 anni fa
- Просмотров:
Транскрипт
1 I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002 dott.ssa Francesca A. Lisi
2 Sommario Generalità sui file in C I file ad accesso sequenziale I file di testo Riferimenti cap. 11 di Deitel & Deitel par. 7.5 di Kernighan & Ritchie
3 La gerarchia dei dati Sally Black Tom Blue Judy Green Iris Orange Randy Red File Judy Judy Green Field Byte (ASCII character J) Record 1 Bit La chiave record identifica un record per facilitarne il ritrovamento all interno del file Nei file sequenziali, i record sono tipicamente ordinati per chiave
4 File e Stream Un file è una sequenza di byte terminante con un marcatore end-of-file Nessuna struttura (assenza della nozione di record) Il programmatore deve fornire una struttura al file Uno stream fornisce un canale di comunicazione fra file e programmi Viene creato all apertura di un file L apertura di un file restituisce un puntatore ad una struttura FILE stdin - standard input (tastiera) stdout - standard output (schermo) stderr - standard error (schermo)
5 Lettura/scrittura su file fgetc /* legge un carattere da file */ Prende un puntatore a FILE come argomento fgetc(stdin) equivalente a getchar() fputc /* scrive un carattere su file */ Prende un puntatore FILE ed un carattere da scrivere come argomento fputc('a', stdout) equivalente a putchar('a') fgets /* legge una riga da file */ fputs /* scrive una riga su file */ fscanf / fprintf Equivalenti di scanf e printf per le elaborazioni su file
6 Apertura/chiusura di un file ad accesso sequenziale FILE *myptr; /* Crea un puntatore FILE*/ myptr=fopen("myfile.dat", openmode); La funzione fopen prende il nome del file e la modalità di apertura come argomenti e restituisce un puntatore FILE al file specificato se l apertura ha avuto successo, NULL altrimenti feof(file pointer) Restituisce true se l indicatore end-of-file (niente più dati da processare) è impostato per il file specificato fclose(file pointer) /* chiude il file */ Eseguito automaticamente quando il programma termina Buona pratica chiudere i file esplicitamente
7 Apertura/chiusura di un file ad accesso sequenziale (II) I programmi possono elaborare uno o più file Ogni file deve avere un nome unico ma può avere molteplici puntatori Tutta l elaborazione di file deve riferirsi al file utilizzando uno dei suoi puntatori Mode Description r Open a file for reading. w Create a file for writing. If the file already exists, discard the current contents. a Append; open or create a file for writing at end of file. r+ Open a file for update (reading and writing). w+ Create a file for update. If the file already exists, discard the current contents. a+ Append; open or create a file for update; writing is done at the end of the file.
8 1 /* Fig. 11.3: fig11_03.c 2 Create a sequential file */ 3 #include <stdio.h> 4 5 int main() 6 { 7 int account; 8 char name[ 30 ]; 9 double balance; 10 FILE *cfptr; /* cfptr = clients.dat file pointer */ if ( ( cfptr = fopen( "clients.dat", "w" ) ) == NULL ) 13 printf( "File could not be opened\n" ); 14 else { 15 printf( "Enter the account, name, and balance.\n" ); 16 printf( "Enter EOF to end input.\n" ); 17 printf( "? " ); 18 scanf( "%d%s%lf", &account, name, &balance ); while (!feof( stdin ) ) { 21 fprintf( cfptr, "%d %s %.2f\n", 22 account, name, balance ); 23 printf( "? " ); 24 scanf( "%d%s%lf", &account, name, &balance ); 25 } fclose( cfptr ); 28 } return 0; 31 } 2000 Prentice Hall, Inc. All rights reserved. Outline 1. Initialize variables and FILE pointer 1.1 Link the pointer to a file 2. Input data 2.1 Write to file (fprintf) 3. Close file
9 Enter the account, name, and balance. Enter EOF to end input.? 100 Jones 24.98? 200 Doe ? 300 White 0.00? 400 Stone ? 500 Rich ? Outline Program Output 2000 Prentice Hall, Inc. All rights reserved.
10 Leggere dati da un file ad accesso sequenziale Aprire il file in lettura myptr = fopen("myfile.dat", "r" ); Usare fscanf per leggere dal file fscanf(myptr, "%d%s%f", &myint, &mystring, &myfloat ); I dati vengono letti dall inizio alla fine del file Il puntatore di posizione nel file (byte offset) indica il numero del prossimo byte da leggere/scrivere rewind(myptr) Riposiziona il puntatore all inizio del file (byte 0)
11 1 /* Fig. 11.7: fig11_07.c 2 Reading and printing a sequential file */ 3 #include <stdio.h> 4 5 int main() 6 { 7 int account; 8 char name[ 30 ]; 9 double balance; 10 FILE *cfptr; /* cfptr = clients.dat file pointer */ if ( ( cfptr = fopen( "clients.dat", "r" ) ) == NULL ) 13 printf( "File could not be opened\n" ); 14 else { 15 printf( "%-10s%-13s%s\n", "Account", "Name", "Balance" ); 16 fscanf( cfptr, "%d%s%lf", &account, name, &balance ); while (!feof( cfptr ) ) { 19 printf( "%-10d%-13s%7.2f\n", account, name, balance ); 20 fscanf( cfptr, "%d%s%lf", &account, name, &balance ); 21 } fclose( cfptr ); 24 } return 0; 27 } Outline 1. Initialize variables 1.1 Link pointer to file 2. Read data (fscanf) 2.1 Print 3. Close file Program Output Account Name Balance 100 Jones Doe White Stone Prentice Rich Hall, Inc. All rights reserved.
12 Aggiornare i dati in un file ad accesso sequenziale I file ad accesso sequenziale non possono essere modificati senza correre il rischio di essere danneggiati La rappresentazione nei file e sullo schermo differisce da quella interna (es. 1, 34, -890 sono tutti di tipo int, ma hanno differenti grandezze su disco) 300 White Jones (old data in file) If we want to change White's name to Worthington, 300 Worthington White Jones Data gets overwritten 300 Worthington 0.00ones 32.87
13 Lettura da file di testo void LeggiTesto(char *nomefile, TipoTesto *t) { FILE *fi; fi = fopen(nomefile, "r"); if (fi == NULL) { fprintf(stderr, "Errore nell'apertura in lettura di %s", nomefile); exit 1;} while (LeggiParola(fi,word,MAXWORD)!=0) t= InserisciCodaLista (&t, word); fclose(fi);}
14 Scrittura su file di testo void ScriviTesto(char *nomefile, TipoTesto t) { FILE *fi; fi = fopen(nomefile, "w"); if (fi == NULL) { fprintf(stderr, "Errore nell'apertura in scrittura di %s", nomefile); exit 1;} while (t!= NULL) { ScriviParola(fi, t->inizio); t = t->next_word;} fclose(fi);}
15 Esercizi Definire la funzione LeggiParola per la lettura di una parola da file di testo Definire la funzione ScriviParola per la scrittura di una parola su file di testo Scrivere un programma C che copia un testo da file ad un altro parola per parola Assunzioni: Una parola è una sequenza di caratteri alfanumerici compresa fra spazi o segni di punteggiatura Il testo letto e/o scritto è memorizzato in una lista concatenata di stringhe
I files in C. A cura del prof. Ghezzi
I files in C A cura del prof. Ghezzi 1 Perchè i files? Realizzano la persistenza dei dati dati che sopravvivono all esecuzione del programma Sono delle strutture di dati sequenziali 2 Files e S.O. I files
Gestione dei file in C
Gestione dei file in C Fondamenti di Informatica Che cos è un file e a cosa serve? Memoria di massa vs memoria centrale q La memoria di massa (disco fisso) è un dispositivo di memorizzazione generalmente
File binari e file di testo
I file File binari e file di testo distinzione tra file binari file di testo si possono usare funzioni diverse per la gestione di tipi di file diversi Programmazione Gestione dei file 2 File binari e file
Linguaggio C: i file
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica A - GES Prof. Plebani A.A. 2006/2007 Linguaggio C: i file La presente dispensa e da utilizzarsi ai soli fini didattici previa
Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE
Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente
Scrittura formattata - printf
Esercizi su Input/Output con formato FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( , ) La funzione restituisce un valore intero uguale ai caratteri
File e puntatori a file
File e puntatori a file Vitoantonio Bevilacqua [email protected] La libreria stdio.h mette a disposizione delle funzioni che hanno la peculiarità di trattare con questa nuova tipologia di
Input/output in C e in C++
FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Input/output in C e in C++ 2001 Pier Luca Montessoro - Davide Pierattoni
GESTIONE DEI FILE IN C
GESTIONE DEI FILE IN C Il concetto di file.. è una parte logicamente contigua del contenuto di un dispositivo! Deve essere capace di memorizzare grandi quantità di dati! I dati memorizzati devono sopravvivere
IL CONCETTO DI FILE. È illecito operare oltre la fine del file.
IL CONCETTO DI FILE Un file è una astrazione fornita dal sistema operativo, il cui scopo è consentire la memorizzazione di informazioni su memoria di massa. Concettualmente, un file è una sequenza di registrazioni
Gestione dei files. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132
Gestione dei files Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132 Struttura del disco fisso Un disco fisso è composto da una serie di piatti sovrapposti Ogni piatto è
Esercizi File. Unità 8. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi Si ringrazia Raffaele Nicolussi
Corso di Laboratorio di Informatica Ingegneria Clinica BCLR Domenico Daniele Bloisi Si ringrazia Raffaele Nicolussi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica,
Esercizi File Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Domenico Daniele Bloisi Si ringrazia Raffaele Nicolussi Docenti Parte I prof. Silvio Salza [email protected]
Gestione di files Motivazioni
Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)
