Programmare in C – File di Testo: Lettura

Guida C

Per leggere un file di testo, basta aprirlo in modalità lettura (r). In generale, non è una buona idea usare una funzione fscanf per leggerlo.

Se il file di testo non è perfettamente formattato, fscanf non sarà in grado di gestirlo correttamente. Invece, si usa fgets per leggere ogni linea e poi effettuare il parsing della porzione di testo che interessa. Il codice seguente illustra il procedimento di lettura da un file di testo e di relativa stampa del suo contenuto sullo schermo.

#include <stdio.h>

int main()
{
    FILE *f;
    char s[1000];

    f=fopen("infile","r");
    if (!f)
        return 1;
    while (fgets(s,1000,f)!=NULL)
        printf("%s",s);
    fclose(f);
    return 0;
}

Lo statemente fgets restituisce un valore NULL quando incontra il marcatore di fine fine (end of file, EOF). Legge una linea (fino a 1000 caratteri in questo caso) e poi li stampa su standard output. Si noti che l’istruzione printf non include \n nella stringa di formato perchè fgets aggiunge un \n al termine di ogni riga letta. Quindi, si può affermare che una linea non è completa quando supera il numero massimo di caratteri specificati nel secondo parametro di fgets.

Errori da evitare in C

– non utilizzare accidentalmente close invece di fclose. La funzione close esiste, quindi il compilatore la accetta e sembrerà funzionare se vengono aperti e chiusi pochi files. Ad ogni modo, se il programma apre e chiude file all’interno di un ciclo, verranno terminati i file handlers disponibili e si verificherà un crash della memoria, proprio perchè close non chiude i file correttamente.

Leave a Reply