La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

File di testo, file binari

Presentazioni simili


Presentazione sul tema: "File di testo, file binari"— Transcript della presentazione:

1 File di testo, file binari
Esercizi File di testo, file binari

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 I file di testo: scrittura
fileTesto = fopen ("pippo.txt", "w"); pippo.txt char var[] = "prova"; p r o v a \0 var fprintf (fileTesto, "%s\n", var); p r o v a \n pippo.txt 1 2 3 4 5

4 I file di testo: scrittura
int var1 = 356; var1 356 fprintf (fileTesto, "%d ",var1); p r o v a \n 3 5 pippo.txt 1 2 4 6 7 8 9 Codici ASCII dei caratteri ‘3’, ‘5’, ‘6’

5 I file di testo: lettura
fileTesto = fopen ("pippo.txt", "r"); p r o v a \n 3 5 pippo.txt 1 2 4 6 7 8 9 fscanf (fileTesto, "%s", var); p r o v a \n 3 5 pippo.txt 1 2 4 6 7 8 9 p r o v a \0 var

6 I file di testo: lettura
fscanf (fileTesto, "%d", &var1); Notare che il carattere ‘\n’ viene scartato p r o v a \n 3 5 pippo.txt 1 2 4 6 7 8 9 var1 356

7 I file di testo: scrittura “append”
fileTesto = fopen ("pippo.txt", "a"); p r o v a \n 3 5 pippo.txt 1 2 4 6 7 8 9 char var2 = @ var2 fprintf (fileTesto, "%c", var2); p r o v a \n 3 5 pippo.txt 1 2 4 6 7 8 9 @ 10

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é quest’ultima 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 File di testo L’utente inserisce una serie di numeri float; il numero 0 indica la fine della fase di inserimento L’elaboratore scrive i numeri in un file di testo, usando due cifre decimali I numeri sono letti dal file, nell’ordine di inserimento, e visualizzati.

10 File di testo #include <stdio.h>
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); } 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); } fclose (fileDiTesto); }

12 File di testo Perché salvare numeri in un 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
fileBin = fopen ("pippo.xxx", "wb"); pippo.xxx float var = 23.45; var 23.45 fwrite (&var, sizeof(float), 1, fileBin); pippo.xxx 1 2 3 23.45

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

16 I file binari: fseek() e ftell()
4 5 6 7 pippo.xxx 1 2 3 23.45 8 9 10 11 long n; n = ftell (fileBin); 12 n fseek (fileBin, sizeof(float)*2, SEEK_SET); 4 5 6 7 pippo.xxx 1 2 3 23.45 8 9 10 11

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

18 I file binari: riepilogo
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 all’interno 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.

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

20 Archivio rilevamenti geografici
#include <stdio.h> 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);

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

22 Archivio rilevamenti geografici
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;

23 Archivio rilevamenti geografici
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;

24 Archivio rilevamenti geografici
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)); }

25 Archivio rilevamenti geografici


Scaricare ppt "File di testo, file binari"

Presentazioni simili


Annunci Google