Para leer en C un fichero de texto ‘fichero.txt’ y procesarlo línea a línea, podemos escribir un programa «lee_fichero.c» conteniendo el siguiente código:
|
#include <stdio.h> int main() { char linea[1024]; FILE *fich; fich = fopen("fichero.txt", "r"); //Lee línea a línea y escribe en pantalla hasta el fin de fichero while(fgets(linea, 1024, (FILE*) fich)) { printf("LINEA: %s FIN_DE_LINEA\n", linea); } fclose(fich); } |
A continuación, compilamos el programa:
|
$ gcc -o lee_fichero lee_fichero.c |
Y por último lo ejecutamos.
Si el fichero de texto a leer «fichero.txt» contiene las líneas:
|
Linea primera Linea segunda Linea tercera |
al ejecutar el script desde la línea de comandos, obtendremos lo siguiente:
|
$ ./lee_fichero LINEA: Linea primera FIN_DE_LINEA LINEA: Linea segunda FIN_DE_LINEA LINEA: Linea tercera FIN_DE_LINEA $ |
NOTAS
Carácter de fin de línea
Como podemos ver en la salida generada por el programa de ejemplo, cada línea leída incluye el carácter de fin de línea ‘\n’. Si deseamos eliminarlo, podemos simplemente añadir dentro del bucle las sentencias:
|
#include <stdio.h> #include <string.h> ... while(fgets(linea, 1024, (FILE*) fich)) { int n = strlen(linea); linea[n-1] = 0; ... } ... |
Tamaño del buffer de lectura.
En el código de ejemplo, para leer las líneas, hemos creado un buffer de 1024 bytes con la sentencia «char linea[1024];». En la llamada a fgets, le pasamos como segundo argumento el tamaño del buffer.
Esto nos permite leer líneas de hasta 1022 (1024-2) caracteres, ya que es necesario un byte adicional para almacenar el carácter de fin de línea (‘\n’), y otro para el caracter nulo (0) que finaliza la cadena de texto.
Si el fichero a leer contiene líneas de mayor tamaño, deberemos dimensionar adecuadamente el buffer.
Podemos añadir al código una condición para comprobar si se da el caso de que una línea del fichero leído es mayor que el tamaño del buffer:
|
#include <stdio.h> #include <string.h> ... while(fgets(linea, 1024, (FILE*) fich)) { int n = strlen(linea); if (linea[n-1] != '\n') { printf ("Error. leída línea incompleta\n"); } ... } ... |
—