La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Politecnico di Milano Esercizi File di testo, file binari.

Presentazioni simili


Presentazione sul tema: "Politecnico di Milano Esercizi File di testo, file binari."— Transcript della presentazione:

1 Politecnico di Milano Esercizi File di testo, file binari

2 - 2 - I File ed il C Insieme omogeneo di dati, memorizzato su disco e caratterizzato da un nome La lunghezza di un file non è fissata a priori Astrazione di un file: un nastro e una testina… File di testo (sequenza di caratteri) e file binari (sequenza di byte) Il file può essere aperto o chiuso Il C, per operare su un file, deve aprire un flusso di comunicazione I flussi chiamati stdin, stdout e stderr sono aperti per default e sono connessi al terminale (tastiera e monitor).

3 - 3 - I file di testo: scrittura I file di testo: scrittura fprintf (fileTesto, "%s\n", var); prova\n pippo.txt fileTesto = fopen ("pippo.txt", "w"); pippo.txt prova\0 var char var[] = "prova";

4 - 4 - I file di testo: scrittura I file di testo: scrittura fprintf (fileTesto, "%d ",var1); prova\n35 pippo.txt int var1 = 356; Codici ASCII dei caratteri 3, 5, 6 var1 356

5 - 5 - I file di testo: lettura I file di testo: lettura fscanf (fileTesto, "%s", var); fileTesto = fopen ("pippo.txt", "r"); prova\n35 pippo.txt prova\n35 pippo.txt prova\0 var

6 - 6 - I file di testo: lettura I file di testo: lettura fscanf (fileTesto, "%d", &var1); prova\n35 pippo.txt Notare che il carattere \n viene scartato var1 356

7 - 7 - I file di testo: scrittura append I file di testo: scrittura append fprintf (fileTesto, "%c", var2); fileTesto = fopen ("pippo.txt", "a"); prova\n35 pippo.txt prova\n35 pippo.txt char var2 = ' var2

8 - 8 - I file di testo: riepilogo Quando si scrive un dato con fprintf(), bisogna inserire un carattere terminatore che ne indichi la fine: \n, \t, Il carattere terminatore serve quando si utilizza la fscanf() perché questultima si accorga che il dato da leggere è terminato Nel caso di %c, non è strettamente necessario Il file va prima aperto, poi letto/scritto e infine chiuso apertura usando w, r, a.

9 - 9 - File di testo Lutente inserisce una serie di numeri float; il numero 0 indica la fine della fase di inserimento Lelaboratore scrive i numeri in un file di testo, usando due cifre decimali I numeri sono letti dal file, nellordine di inserimento, e visualizzati.

10 File di testo #include void scriviInFile (char nomeFile[]) { const float TERMINATORE = 0.0; FILE *fileDiTesto; float numero; fileDiTesto = fopen (nomeFile, "w"); printf ( " Numero: "); scanf ("%f", &numero); while (numero != TERMINATORE) { fprintf (fileDiTesto, "%.2f\n", numero); printf ("Numero: "); scanf ("%f", &numero); } fclose (fileDiTesto); }.

11 File di testo void leggiDaFile (char nomeFile[]) { FILE *fileDiTesto; float numero; fileDiTesto = fopen (nomeFile, "r"); fscanf (fileDiTesto, "%f", &numero); while (!feof(fileDiTesto)) { printf ("Numero: %.2f\n", numero); fscanf (fileDiTesto, "%f", &numero); } fclose (fileDiTesto); }.

12 File di testo void main() { char nomeArchivio[] = "C:\\pippo.txt"; scriviInFile (nomeArchivio); leggiDaFile (nomeArchivio); } Perché salvare numeri in un file di testo? Si può fare (converte i numeri in stringhe di testo) Il file sarà leggibile da programmi tipo notepad Non è però molto comune (vedi file binari)

13 File di testo

14 I file binari: scrittura fwrite (&var, sizeof(float), 1, fileBin); fileBin = fopen ("pippo.xxx", "wb"); pippo.xxx float var = 23.45; var pippo.xxx

15 I file binari: lettura I file binari: lettura fread (&var, sizeof(float), 1, fileBin); fileBin = fopen ("pippo.xxx", "rb"); pippo.xxx pippo.xxx var 23.45

16 I file binari: fseek() e ftell() I file binari: fseek() e ftell() fseek (fileBin, sizeof(float)*2, SEEK_SET); long n; n = ftell (fileBin); 12 n 4567 pippo.xxx pippo.xxx

17 I file binari: vettori e stringhe I file binari: vettori e stringhe fwrite (vet, sizeof(vet), 1, fileBin); fileBin = fopen ("pluto.xxx", "wb"); pluto.xxx int vet[2]; vet[0] = 15; vet[1] = 23; 1523 vet pluto.xxx

18 Lettura/scrittura di blocchi di byte Tipicamente, tutti i blocchi hanno la stessa dimensione Non serve carattere terminatore perché indico io alla fread() quanti byte deve leggere Anche qui il file va prima aperto, poi letto/scritto e infine chiuso apertura usando wb, rb, ab Istruzioni per spostarsi allinterno del file: fseek() e per sapere in quale posizione sono: ftell() fseek() e ftell() possono essere usate anche con file di testo ma sono meno utili. I file binari: riepilogo I file binari: riepilogo

19 Archivio rilevamenti geografici Il programma dovrà permettere allutente di inserire una serie di rilevamenti geografici (latitudine e longitudine). Linserimento di una latitudine pari a 100 indicherà la fine della fase di inserimento Lelaboratore salverà i dati in un file binario Successivamente lutente inserirà una latitudine e lelaboratore, cercando nel fine, troverà e visualizzerà tutti i rilevamenti caratterizzati da quel valore di latitudine Infine, lelaboratore visualizzerà il numero di rilevamenti trovati.

20 #include typedef struct { unsigned int latitudine; unsigned int longitudine; } Rilevamento; void inserisci (char nomeFile[]) { const unsigned int TERMINATORE = 100; FILE *archivio; Rilevamento nuovoRilev; archivio = fopen (nomeFile, "wb"); printf ("Latitudine (100 per finire): "); scanf ("%u", &nuovoRilev.latitudine);. Archivio rilevamenti geografici

21 Archivio rilevamenti geografici if (nuovoRilev.latitudine != TERMINATORE) { printf ("Longitudine: "); scanf ("%u", &nuovoRilev.longitudine); } while (nuovoRilev.latitudine != TERMINATORE) { fwrite (&nuovoRilev, sizeof(Rilevamento), 1, archivio); printf ("Latitudine (100 per finire): "); scanf ("%u", &nuovoRilev.latitudine);.

22 if (nuovoRilev.latitudine != TERMINATORE) { printf ("Longitudine: "); scanf ("%u",&nuovoRilev.longitudine); } } /* fine while */ fclose (archivio); } /* fine inserisci() */ unsigned int cerca (char nomeFile[], unsigned int latidCercata) { FILE *archivio; Rilevamento rilev; unsigned int cont = 0;. Archivio rilevamenti geografici

23 archivio = fopen (nomeFile, "rb"); fread (&rilev, sizeof(Rilevamento), 1, archivio); while (!feof(archivio)) { if (rilev.latitudine == latidCercata) { printf ("Latitudine: %u\n", rilev.latitudine); printf ("Longitudine: %u\n", rilev.longitudine); cont++; } fread (&rilev, sizeof(Rilevamento), 1, archivio); } fclose (archivio); return cont; } Archivio rilevamenti geografici

24 void main() { char nomeArchivio[] = "C:\\numeri.dat"; unsigned int latitudine; inserisci (nomeArchivio); printf ("Quale latitudine? "); scanf ("%u", &latitudine); printf ("Totale: %u\n", cerca (nomeArchivio, latitudine)); } Archivio rilevamenti geografici

25 Archivio rilevamenti geografici


Scaricare ppt "Politecnico di Milano Esercizi File di testo, file binari."

Presentazioni simili


Annunci Google