Sei sulla pagina 1di 16

Corso di Fondamenti di Informatica

Ingegneria delle Comunicazioni – BCOR


Ingegneria Elettronica – BELR

Introduzione al C

Unità 9 – File

D. Bloisi, A. Pennisi, S. Peluso, S. Salza


Esercizio
Leggere un file di testo esempio.txt e stampare
ogni parola in una singola riga

Contenuto del Output


file di testo. Contenuto
del
file
di
testo.
esempio.txt
File - Unità 9 2013/2014 Pagina 42
Condizioni sull’input
Esiste già un file che deve essere aperto
in lettura e analizzato per produrre il
risultato desiderato.

File - Unità 9 2013/2014 Pagina 43


Soluzione
#include <stdio.h>
int main (){
char ch;
FILE *fd; //descrittore del file
fd = fopen("esempio.txt", "r");
if(fd != NULL){
while (fscanf(fd, "%c", &ch) != EOF) {
if(ch == ' ')
printf("\n");
else
printf("%c", ch);
}
}
else
printf ("\nErrore di apertura!");
fclose(fd);
return 0;
}
File - Unità 9 2013/2014 Pagina 44
Valore di ritorno per fscanf

int fscanf ( FILE * stream, const char * format, ... );

fscanf restituisce un valore che è pari ad EOF


quando viene raggiunta la fine del file

File - Unità 9 2013/2014 Pagina 45


Esercizio scrittura su file
Memorizzare su un file clienti.txt i seguenti
dati:

•  Numero conto
•  Bilancio

per un massimo di 10 clienti inseriti da tastiera.

Digitare EOF per terminare prima l’inserimento.

File - Unità 9 2013/2014 Pagina 48


Soluzione scrittura su file
int main () {
int conto, i; float bilancio;
FILE *cfPtr; /* descrittore file */
if ((cfPtr = fopen("clienti.txt", "w")) == NULL)
printf("Il file non puo' essere aperto");
else {
for (i=1; i<=10; i++) {
printf("Immetti il conto e il bilancio\n");
if(scanf("%d %f", &conto, &bilancio) == EOF)
break;
fprintf(cfPtr, "%d %f\n", conto, bilancio);
}
fclose(cfPtr);
}
return EXIT_SUCCESS;
}
File - Unità 9 2013/2014 Pagina 49
Esecuzione
Immetti il conto e
il bilancio 23 456.000000
23 456 12 8764.000000
Immetti il conto e 90 -78.000000
il bilancio
12 8764
Immetti il conto e
il bilancio
90 -78
Immetti il conto e
clienti.txt
il bilancio
^Z File - Unità 9 2013/2014 Pagina 50
Esercizio lettura da file

Leggere dal file clienti.txt i seguenti


dati:

•  Numero conto
•  Bilancio

File - Unità 9 2013/2014 Pagina 51


Soluzione lettura da File
int main () {
int conto, i; float bilancio;
FILE *cfPtr; /* descrittore file */
if ((cfPtr = fopen("clienti.txt", "r")) == NULL)
printf("Il file non puo\' essere aperto\n");
else {
printf("Conto \t\t Bilancio\n");
for (i=1; i<=10; i++) {
if(fscanf(cfPtr,"%d %f",&conto,&bilancio) == EOF)
break;
printf("%d \t\t %f\n", conto, bilancio);
}
fclose(cfPtr);
}
return EXIT_SUCCESS;
}
File - Unità 9 2013/2014 Pagina 52
Esecuzione

Conto Bilancio
23 456.000000
12 8764.000000
90 -78.000000

File - Unità 9 2013/2014 Pagina 53


Esempio: conteggio caratteri in un
file
int main( ) {
FILE *fPtr ;
char ch ;
long int cont = 0 ;
if((fPtr = fopen(”input.txt", "r")) != NULL){
while( fscanf(fPtr, "%c", &ch ) != EOF ) {
cont++ ;
}
printf( "cont = %ld\n" , cont ) ;
// cont = numero caratteri in "lettera.txt"
fclose( fPtr ) ;
}
else
printf( "errore apertura file" ) ;
return EXIT_SUCCESS;
}
File - Unità 9 2013/2014 Pagina 54
Esercizio: acquisizione array da
file
Si scriva un programma che legga un array da un
file. Il file è denominato “arr.dat” ed è composto da
10 righe rappresentanti un array di dieci elementi
interi, con un elemento per riga. Si stampi poi il
contenuto dell’array.

File - Unità 9 2013/2014 Pagina 55


Soluzione
#include <stdio.h>
#include <stdlib.h>

int main( ) {
int max_d = 10;
FILE *frPtr;
int v[max_d], pos;
if ((( frPtr = fopen( ”arr.dat" , "r" )) != NULL ))
{
for( pos = 0 ; pos < max_d ; pos++ )
fscanf( frPtr , "%d" , &v[pos] ) ;
fclose( frPtr ) ;
}
else printf( "errore apertura file\n" ) ;
for( pos = 0 ; pos < max_d ; pos++ )
printf("%d ", v[ pos ] ) ;
printf("\n");
return EXIT_SUCCESS;
} File - Unità 9 2013/2014 Pagina 56
Convertire caratteri numerici in
interi
#include <stdlib.h>

int atoi(const char *str);

La funzione atoi converte la porzione iniziale puntata dalla


stringa str in una rappresentazione di tipo int.

Esempio:

char* str = "23ciao";


int i = atoi(str);
printf("%d\n", i);
return 0;

File - Unità 9 2013/2014 Pagina 57


Esercizio
Realizzare un programma sommafile che
prenda tre parametri in ingresso:
<A> primo addendo intero;
<B> secondo addendo intero;
<C> nome di un file.
Il programma deve sommare A e B, creare un
file denominato con il nome C e stampare il
risultato nel file.

File - Unità 9 2013/2014 Pagina 58