Lettura file (Esempio 1)

Concetti:
Funzioni di apertura, chiusura e lettura da file. Esempio di lettura di file riga per riga, parola per parola, carattere per carattere e di file strutturati (in cui in ogni riga ci sono campi di tipo diversi)

Testo:
Realizzare un programma che:

prova.txt
Prima riga
Seconda riga
prova2.txt
Stefano 122333 23.5
Giulia 122334 29.5

Soluzione:

lettura_file_1.c
/* Esempio di lettura di file riga per riga, parola per parola, carattere per carattere e di file strutturati (in cui in ogni riga ci sono campi di tipo diversi) */
 
#include <stdio.h>
#include <stdlib.h>
 
#define LUN 50
 
int main()
{
    FILE *fp;
 
    char riga[LUN+1]; /* Per leggere stringhe di lunghezza fino a 50 caratteri devo dichiarle di dimensione 51, perche' l'ultimo carattere del vettore e' occupato dal carattere di terminazione stringa \0 */
    char ch;
    int intValue;
    float floatValue;
 
    /* Lettura contenuto file prova.txt */
    /* Apertura file */
    printf("LETTURA prova.txt\n");
    fp = fopen("prova.txt", "r");
 
    /* Controllo se il file e' stato aperto senza errori */
    if (fp == NULL){
        printf("Errore: impossibile aprire il file 1-prova.txt\n");
        exit(1);
    }
 
    /* Lettura del file riga per riga */
    printf("Primo metodo di lettura:\n");
    while ( fgets(riga, LUN, fp) != NULL ) {
       printf("LETTO: %s\n", riga);
    }
 
    /* Sconsigliato */
    /* 
    rewind(fp);
 
    printf("Secondo metodo di lettura:\n");
    fgets(riga, LUN, fp);
    while ( !feof(fp) ) {
        printf("LETTO: %s\n", riga);
        fgets(riga, LUN, fp);
    }
    */
 
    rewind(fp);
 
    /* Lettura del file parola per parola */
    printf("Secondo metodo di lettura:\n");
    while ( fscanf(fp, "%s", riga) != EOF ) {
       printf("LETTO: %s\n", riga);
    }
 
    rewind(fp);
 
    /* Lettura del file carattere per carattere */
    printf("Terzo metodo di lettura:\n");
    while ( (ch=getc(fp)) != EOF ) {
       printf("%c ", ch);
    }
 
    fclose(fp); /* Chiusura del file */
 
    /* Lettura file prova2.txt */
    /* Nota: il file contiene per ogni riga una stringa, un intero e un numero reale */
 
    /* Apertura file */
    printf("LETTURA prova2.txt\n");
    if ( (fp = fopen("prova2.txt", "r")) == NULL){
        printf("Errore: impossibile aprire il file 1-prova2.txt\n");
        exit(1);
    }
 
    /* Primo metodo di lettura */
    /* Consigliato perche' piu' compatto */
    printf("Primo metodo di lettura:\n");
    while ( fscanf(fp, "%s %d %f", riga, &intValue, &floatValue) != EOF ) {
      printf("LETTO: %s %d %f\n", riga, intValue, floatValue);
    }
 
    rewind(fp);
 
    /* Secondo metodo di lettura */
    printf("Secondo metodo di lettura:\n"); 
    while ( fgets(riga, LUN, fp) != NULL ) { /* E' consigliabile il metodo precedente */
      sscanf(riga, "%s %d %f", riga, &intValue, &floatValue);
      printf("LETTO: %s %d %f\n", riga, intValue, floatValue);
    }
 
    fclose(fp); /* Chiusura file */
 
    return 0;
}