• Non ci sono risultati.

Apertura di un file:

N/A
N/A
Protected

Academic year: 2021

Condividi "Apertura di un file:"

Copied!
11
0
0

Testo completo

(1)

Operazioni su file di caratteri

I Aperturafopen

I Chiusura fclose

I Scritturafprintf

I Letturafscanf

I Controllo fine filefeof

(2)

Apertura di un file:

Si utilizza la funzione fopencontenuta instdio.h la cui intestazione `e:

FILE * fopen(char *nomefile, char *modo);

I FILE anche questo `e definito nella libreria stdio, ed `e un tipo struct che contiene le informazioni necessarie alla gestione del file.

I Il primo parametro `e la stringa nome del file,

I Il secondo parametro `e una stringa che contiene un unico carattere e indica la modalit`a di utilizzo del file.

I Esempio: FILE *fp; fp = fopen("pippo.dat", "r");

I L’apertura deve essere effettuataprima di poter operare su un qualsiasi file.

(3)

Modalit` a di apertura di un file

I "r"(read) . . . sola lettura

I "w"(write) . . . crea un nuovo file per la scrittura; se il file esiste gi`a ne elimina il contenuto corrente

I "a"(append) . . . crea un nuovo file, o accoda ad uno esistente per la scrittura

I "r+" . . . apre un file per l’aggiornamento (lettura e scrittura), a partire dall’inizio del file

I "w+" . . . crea un nuovo file per l’aggiornamento; se il file esiste gi`a ne elimina il contenuto corrente

I "a+" . . . crea un nuovo file, o accoda ad uno esistente per l’aggiornamento

(4)

I Aprire un file inesistente in scrittura, il file viene creato (ovviamente bisogna avere diritti di scrittura nella directory corrente)

I Aprire un file inesistente in lettura `e un errore.

I Il valore calcolato da fopendeve essere memorizzato in una variabile e passato a tutte le funzioni che operano sul file.

I se si verifica un errore in fase di apertura,fopenrestituisce NULL

I Esempio:

FILE *fp;

if ((fp = fopen("pippo.dat", "r")) == NULL) printf("Errore!\n");

exit(1);

else ...

(5)

Chiusura di un file:

Si utilizza la funzione fclose, contenuta instdio.h, passando il file pointer. L’intestazione della funzione `e:

int fclose(FILE *fp);

I Esempio: fclose(fp);

I Se si `e verificato un errore, fcloserestituisce EOF(−1).

I La chiusura va sempreeffettuata, appena sono terminate le operazioni di lettura/scrittura da effettuare sul file.

I Si consiglia di aprire i file subito prima di effettuare le operazioni di lettura e scrittura e di chiuderlo appena le operazioni sono terminate.

I Si consiglia anche di usare nomi diversi di file pointer per file diversi.

(6)

Scrittura su e lettura da file

Consideriamo solo file adaccesso sequenziale:

I si legge e si scrive in sequenza, senza poter accedere agli elementi precedenti o successivi.

I vediamo solo le analoghe di printfescanf

I attenzione alla distruzione del contenuto precedente del file, quando si scrive sul file.

I Vediamo un esempio di scrittura:

int ris1, ris2;

FILE *fp;

if ((fp = fopen("risultati.dat", "w")) != NULL) { ris1 = ...; ris2 = ...;

fprintf(fp, "%d %d\n", ris1, ris2);

fclose(fp);}

(7)

Scrittura su file:

La funzionefprintf

I Intestazione difprintf:

int fprintf(FILE *fp, char *formato, ...);

I comeprintf, tranne che per il parametro fp

I printf(...);`e equivalente a fprintf(stdout, ...);

I scrive sul file identificato da fpa partire dalla posizione corrente

I il file deve essere stato aperto in scrittura, append, o aggiornamento

I in caso di errore restituisce la costante simbolicaEOF(-1 o valore negativo) altrimenti il numero di byte scritti

(8)

Lettura da file:

La funzione fscanf

I Intestazione difscanf:

int fscanf(FILE *fp, char *formato, ...);

I comescanf, tranne che per fp

I scanf(...);`e equivalente a fscanf(stdin, ...);

I legge dal file identificato dafp a partire dalla posizione corrente

I il file deve essere stato aperto in lettura o aggiornamento

I restituisce il numero di assegnamenti fatti agli argomenti specificati nell’attivazione dopo la stringa di formato

I se il file termina o si ha un errore prima del primo assegnamento, restituisce la costante simbolicaEOF

(9)

Verifica di fine file:

Si usa la funzionefeof

I L’intestazione della funzionefeof

int feof(FILE *fp);

I Calcola vero (1) se per il file `e stato impostato l’indicatore di end of file, ovvero: quando si tenta di leggere oltre la fine del file

I per lo standard input, quando viene digitata la combinazione di tasti

I ctrl-z (per Windows)

I return ctrl-d (per Unix)

Potete anche scrivere i dati direttamente su file e poi farli leggere dal programma, dovete per`o fare attenzione all’inserimento del fine file.

(10)

Calcolare la somma degli interi in un file

int somma = 0, n;

FILE *fp;

if ((fp = fopen("pippo.txt", "r")) != NULL) { while (fscanf(fp, "%d", &n) == 1)

somma += n;

fclose(fp);

}

(11)

Lettura da file dei dati in un array

void readArrayFile (arrayInt a, int size, char nomefile[]) { int i,j;

FILE *flPtr=fopen(nomefile,"r");

for (i=0; (!feof(flPtr)&(i<size)); i++) { j=fscanf(flPtr,"%d",&a[i]);

printf("i=%d j= %d a[i] %d ",i,j,a[i]);}

fclose(flPtr);

}

int main () { arrayInt a;

readArrayFile(a, SIZE,"dati.txt");

...

}

Riferimenti

Documenti correlati

Date due liste circolari L e M che contengono insiemi disgiunti, la seguente procedura DisjointU nion(L, M ) ritorna un puntatore alla lista che con- tiene l’unione disgiunta

scrivere in forma leggibile il proprio nome, cognome e matricola sul testo del compito e su ogni foglio consegnato;.. provare gli esercizi prima in

L’operazione di forward shift su una sequenza sposta ogni elemento della sequenza di una posizione in avanti in modo circolare (quindi l’ultimo elemento viene spostato in

L'Agenzia europea per i medicinali (EMA) è a conoscenza delle recenti notizie diffuse dai media e delle pubblicazioni 1 che fanno riferimento alla possibile capacità di

La funzione read.table legge un file memorizzato su disco, inserendo i dati direttamente in un data frame.. Il file esterno deve essere memorizzato nel

• Nei locali del diving si potrà accedere in numero massimo di 2 alla volta e comunque mantenendo la distanza di sicurezza minima di 1 metro.. • Alle docce si

Department &lt;Biology and Evolution of Marine Organisms (BEOM)&gt;, Stazione Zoologica Anton Dohrn, Napoli

Parallelamente, per i Colleghi abilitati alla fascia di Ordinario, considerati i recenti orientamenti ministeriali che propendono ad attribuire agli Atenei