politecnico di milano esercizi file di testo, file binari
TRANSCRIPT
![Page 1: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/1.jpg)
PolitecnicoPolitecnicodi Milanodi Milano
EserciziEsercizi
File di testo, file binariFile di testo, file binari
![Page 2: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/2.jpg)
- - 22 - -
I File ed il CI File ed il C
Insieme omogeneo di dati, memorizzato su disco e caratterizzato da un nomeLa lunghezza di un file non è fissata a prioriAstrazione 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 chiusoIl C, per operare su un file, deve aprire un flusso di comunicazioneI flussi chiamati stdin, stdout e stderr sono aperti per default e sono connessi al terminale (tastiera e monitor).
![Page 3: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/3.jpg)
- - 33 - -
I file di testo: scritturaI file di testo: scrittura
fprintf (fileTesto, "%s\n", var);
p r o v a \npippo.txt
0 1 2 3 4 5
fileTesto = fopen ("pippo.txt", "w");
pippo.txt
p r o v a \0var
char var[] = "prova";
![Page 4: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/4.jpg)
- - 44 - -
I file di testo: scritturaI file di testo: scrittura
fprintf (fileTesto, "%d ",var1);
p r o v a \n 3 5pippo.txt
0 1 2 3 4 5 6 7
6
8 9
int var1 = 356;
Codici ASCII dei caratteri ‘3’, ‘5’, ‘6’
var1 356
![Page 5: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/5.jpg)
- - 55 - -
I file di testo: letturaI file di testo: lettura
fscanf (fileTesto, "%s", var);
fileTesto = fopen ("pippo.txt", "r");
p r o v a \n 3 5pippo.txt
0 1 2 3 4 5 6 7
6
8 9
p r o v a \n 3 5pippo.txt
0 1 2 3 4 5 6 7
6
8 9
p r o v a \0var
![Page 6: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/6.jpg)
- - 66 - -
I file di testo: letturaI file di testo: lettura
fscanf (fileTesto, "%d", &var1);
p r o v a \n 3 5pippo.txt
0 1 2 3 4 5 6 7
6
8 9
Notare che il carattere ‘\n’ viene scartato
var1 356
![Page 7: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/7.jpg)
- - 77 - -
I file di testo: scrittura I file di testo: scrittura “append”“append”
fprintf (fileTesto, "%c", var2);
fileTesto = fopen ("pippo.txt", "a");
p r o v a \n 3 5pippo.txt
0 1 2 3 4 5 6 7
6
8 9
p r o v a \n 3 5pippo.txt
0 1 2 3 4 5 6 7
6
8 9
@
10
char var2 = '@';
@var2
![Page 8: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/8.jpg)
- - 88 - -
I file di testo: riepilogoI 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 è terminatoNel caso di “%c”, non è strettamente necessarioIl file va prima aperto, poi letto/scritto e infine chiuso apertura usando “w”, “r”, “a”.
![Page 9: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/9.jpg)
- - 99 - -
File di testoFile di testo
L’utente inserisce una serie di numeri float; il numero 0 indica la fine della fase di inserimentoL’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.
![Page 10: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/10.jpg)
- - 1010 - -
File di testoFile 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);printf ("Numero: ");scanf ("%f", &numero);
}fclose (fileDiTesto);
} .
![Page 11: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/11.jpg)
- - 1111 - -
File di testoFile 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);
} .
![Page 12: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/12.jpg)
- - 1212 - -
File di testoFile 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 notepadNon è però molto comune (vedi file binari)
![Page 13: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/13.jpg)
- - 1313 - -
File di testoFile di testo
![Page 14: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/14.jpg)
- - 1414 - -
I file binari: scritturaI file binari: scrittura
fwrite (&var, sizeof(float), 1, fileBin);
fileBin = fopen ("pippo.xxx", "wb");
pippo.xxx
float var = 23.45;
var 23.45
pippo.xxx
0 1 2 3
23.45
![Page 15: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/15.jpg)
- - 1515 - -
I file binari: letturaI file binari: lettura
fread (&var, sizeof(float), 1, fileBin);
fileBin = fopen ("pippo.xxx", "rb");
pippo.xxx
0 1 2 3
23.45
pippo.xxx
0 1 2 3
23.45
var 23.45
![Page 16: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/16.jpg)
- - 1616 - -
I file binari: fseek() e ftell()I file binari: fseek() e ftell()
fseek (fileBin, sizeof(float)*2, SEEK_SET);
long n; n = ftell (fileBin);
12n
4 5 6 7
pippo.xxx
0 1 2 3
23.45 425.025
8 9 10 11
125.521
4 5 6 7
pippo.xxx
0 1 2 3
23.45 425.025
8 9 10 11
125.521
![Page 17: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/17.jpg)
- - 1717 - -
I file binari: vettori e stringheI 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;
15 23vet
pluto.xxx
0 1 2 3
15 23
![Page 18: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/18.jpg)
- - 1818 - -
Lettura/scrittura di blocchi di byteTipicamente, tutti i blocchi hanno la stessa dimensioneNon serve carattere terminatore perché indico io alla fread() quanti byte deve leggereAnche 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.
I file binari: riepilogoI file binari: riepilogo
![Page 19: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/19.jpg)
- - 1919 - -
Archivio rilevamenti geograficiArchivio 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 inserimentoL’elaboratore salverà i dati in un file binarioSuccessivamente l’utente inserirà una latitudine e l’elaboratore, cercando nel fine, troverà e visualizzerà tutti i rilevamenti caratterizzati da quel valore di latitudineInfine, l’elaboratore visualizzerà il numero di rilevamenti trovati.
![Page 20: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/20.jpg)
- - 2020 - -
#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); .
Archivio rilevamenti geograficiArchivio rilevamenti geografici
![Page 21: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/21.jpg)
- - 2121 - -
Archivio rilevamenti geograficiArchivio 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); .
![Page 22: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/22.jpg)
- - 2222 - -
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 geograficiArchivio rilevamenti geografici
![Page 23: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/23.jpg)
- - 2323 - -
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 geograficiArchivio rilevamenti geografici
![Page 24: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/24.jpg)
- - 2424 - -
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 geograficiArchivio rilevamenti geografici
![Page 25: Politecnico di Milano Esercizi File di testo, file binari](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb59497959361e8c4b18/html5/thumbnails/25.jpg)
- - 2525 - -
Archivio rilevamenti geograficiArchivio rilevamenti geografici