• Non ci sono risultati.

File sequenziali in C - Lettura

Nel documento Algoritmi di base (pagine 27-38)

fprintf(fileNomi,"%s", nome); // scrive il valore della stringa della // variabile nome in Nomi.txt ... ...

fclose (fileNomi);

File sequenziali in C - Lettura

Lettura da file:

fscanf(<nome_puntatore_file>, <formato_dati>, &<nomi_variabili>)

Assegna a <nomi_variabili> il/i valore/i letti nel file puntato da

<nome_puntatore_file> secondo il <formato_dati>

Es. File *fileNomi;

fileNomi =fopen(“Nomi.txt",“r"); //apre il file Nomi.txt in scrittura ... ...

fscanf(fileNomi,"%s", &nome); // legge una stringa in Nomi.txt e assgna // il valore letto alla variabile nome ... ...

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 55

File sequenziali in C

Funzione feof(<nome_puntatore_file>)

permette di verifcare se si è raggiunta la fine del file puntato da <nome_puntatore_file>

Es. File *fileNomi;

fileNomi =fopen(“Nomi.txt",“r"); //apre il file Nomi.txt in scrittura ... ... fscanf(fileNomi,"%s",&nome); if (!feof(FileNomi)) { ... ... fscanf(fileNomi,"%s",&nome); ... ... } fclose (fileNomi);

File sequenziali in C: un programma di esempio #include <stdio.h>

#include <string.h> main ()

// Salva nomi in un file di testo {char nome[20];

int conta=0; //conta quanti nomi sono immessi

FILE *Fnomi; char risp ='S';

//apertura file Nomi.txt in scrittura Fnomi=fopen("Nomi.txt","w");

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 57

File sequenziali in C: un programma di esempio // verifica che il file esiste

if (Fnomi == NULL)

printf ("Il file non puo' essere aperto \n"); else { while ((risp=='S')||(risp=='s')) {printf("Nome: \n"); fflush(stdin); gets(nome);

// scrive sul file il nome digitato fprintf(Fnomi,"%s \n",nome);

conta++;

printf("Vuoi inserire altri nomi?(S/N)"); scanf(“c",&risp);

}

}

File sequenziali in C: un programma di esempio

//chiusura del file Nomi.txt fclose(Fnomi);

printf("\nInseriti %d nomi nel file\n", conta);

system("Pause"); }

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 59

File sequenziali in C: un programma di esempio #include <stdio.h>

#include <string.h>

main () // Legge i nomi dal file e li visualizza

{ int conta = 0; char nome[20]; FILE*Fnomi;

Fnomi=fopen("Nomi.txt","r"); //apre file in lettura

if (Fnomi == NULL)

printf ("Il file non puo' essere aperto \n"); else { do { fscanf(Fnomi,"%20s\n", &nome); puts(nome); conta++;} while (!feof(Fnomi)); } fclose(Fnomi);

printf("\nLetti %d nomi dal file\n", conta); system("Pause");

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 61 File sequenziali in C: un programma di esempio #include <stdio.h>

#include <string.h> main ()

// Legge nomi da file e li carica in un array

{ int conta = 0, i; char nome[20]; struct nomi_str

{char *nome_str[20];}; struct nomi_str arr_nomi[50]; FILE*Fnomi;

Fnomi=fopen("Nomi.txt","r"); // apre in lettura

if (Fnomi == NULL)

printf ("Il file non puo' essere aperto \n"); else

{ while (!feof(Fnomi)) //carica in array

{fscanf(Fnomi,"%20s\n", &arr_nomi[conta].nome_str); conta++;}

}

File sequenziali in C: un programma di esempio

printf("\n\nARRAY NOMI \n");

for(i=0;i<conta;i++)

printf("arr_Nomi[%d]=%s\n",i, arr_nomi[i].nome_str);

fclose(Fnomi); system("Pause"); }

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 63

Esempio

Definizione del problema: Scrivere un programma che consente di

salvare i dati di un array monodimensionale di interi in un file

sequenziale di testo, salvando nel file anche il valore del riempimento quale primo elemento del file. Calcolare la sommatoria degli elementi dello array.

Copiare i dati salvati nel file in un nuovo array monodimensionale di interi.

Definizione dei dati del problema:

I: gli elementi dello array Pi:nessuna

U: il file di testo con i valori dello array ed il riempimento; il nuovo array ‘caricato’ con i valori nel file

Pu: nessuna

#include<stdio.h> main ( )

{FILE*Fmio;

int i, num, riemp=5, tot=0, riemp2; int vett[]={1,4,7,8,11};

int vett2[15]; int a;

//apre fileint.txt in scrittura Fmio= fopen("fileint.txt","w");

//scrive valore di riemp sul primo rigo del file fprintf(Fmio,"%d\n", riemp);

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 65 // scrive i valori di vett sugli altri righi

for (i=0;i<riemp;i++)

{ fprintf(Fmio,"%d\n", vett[i]);

// calcola sommatoria elementi array tot=tot+vett[i];

}

printf("tot = %d \n", tot); printf("FINE SALVATAGGIO\n");

fclose(Fmio); //chiude fileint.txt

system("Pause“);

Un semplice programma C per scrittura e lettura di un file sequenziale

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 67 // Legge il contenuto del file e riporta i valori in un // array monodimensionale di interi

printf("INIZIO CARICAMENTO\n"); //apre fileint.txt in lettura Fmio= fopen("fileint.txt","r");

fscanf(Fmio,"%d",&riemp2); // legge il primo valore dal // file e lo assegna alla // variabile riemp2

Un semplice programma C per scrittura e lettura di un file sequenziale

// verifica che non si è a fine file if (!feof(Fmio))

// legge gli altri valori dal file e li copia in vett2 {for (i=0;i<riemp2;i++) {fscanf(Fmio,"%d", &vett2[i]); printf("vett2[%d]=%d \n",i,vett2[i]); } printf("FINE CARICAMENTO\n"); }

else printf("RAGGIUNTA FINE FILE"); fclose(Fmio); //chiude fileint.txt

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 69 ... cosa accade in esecuzione ...

// Carica da file un array di interi con ciclo WHILE Fmio= fopen("fileint.txt","r");

printf("\n\n\n Cicla su file con while (!feof)\n"); fscanf(Fmio,"%d",&riemp2); if (!feof(Fmio)) {i=0; fscanf(Fmio,"%d", &vett2[i]); while (!feof(Fmio)) {printf("vett2[%d]=%d \n",i,vett2[i]); fscanf(Fmio,"%d", &vett2[i]); i++; }

printf("FINE CARICAMENTO con while\n"); }

else printf("RAGGIUNTA FINE FILE");

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 71

// Aggiunge altri valori accodandoli alla fine del file printf(“INIZIA ACCODAMENTO\n");

Fmio=fopen("fileint.txt","a"); // apre per accodare // aggiunge in coda al file i valori di vett // moltiplicati per 2;

for (i=0;i<riemp;i++)

fprintf(Fmio,"%d\n", (vett[i]*2)); printf("FINE ACCODAMENTO\n");

fclose(Fmio);

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 73 ... cosa accade in esecuzione ...

printf("LEGGE E VISUALIZZA TUTTI I VALORI NEL FILE \n"); //apre fileint.txt in lettura

Fmio=fopen("fileint.txt","r"); if (!feof(Fmio))

{

//legge e assegna alla variabile a // il primo valore nel file

fscanf(Fmio,"%d", &a);

Elementi di Informatica

Prof. G. A. Di Lucca - Univ. del Sannio 75 // cicla fino a che non si è a fine file

// e legge e visualizza gli altri valori dal file i=1;

while (!feof(Fmio)

{printf("valore n.ro %d = %d\n",i,a); fscanf(Fmio,"%d", &a);

i++; } }

else printf("RAGGIUNTA FINE FILE");

fclose(Fmio); //chiude fileint.txt

system("Pause"); } // fine programma

Un semplice programma C per scrittura e lettura di un file sequenziale

Esempio

Nel documento Algoritmi di base (pagine 27-38)

Documenti correlati