Unidad Didáctica 26 Ficheros de texto Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Declaración de un fichero de texto typedef FILE * Fichero; Fichero variable_fichero; Ejemplo: #include <stdio.h> typedef FILE * Fichero; void main (void) { Fichero fcad; Fichero fent; … UD26: Ficheros de texto Apertura y cierre de un fichero de texto Apertura variable_fichero = fopen (nombre_fichero, modo) Ejemplo: f = fopen ("datos.txt", "r"); //lectura f = fopen ("datos.txt", "w"); //escritura f = fopen ("datos.txt", "r+"); //lectura-escritura Cierre fclose (f); UD26: Ficheros de texto Detección del final de un fichero de texto feof (variable_fichero) Ejemplo: leer primer elemento del fichero while (!feof(f)) { tratar elemento leer elemento siguiente } UD26: Ficheros de texto Lectura y escritura de un fichero de texto Lectura/Escritura de caracteres: fgetc, fputc Lectura/Escritura de cadenas: fgets, fputs Lectura/Escritura con formato: fscanf, fprintf Diferencia entre gets/fgets y puts/fputs : • gets lee hasta encontrar un ‘\n’, que se lee y se sustituye por un ‘\0’. • fgets añade el ‘\0’ detrás del ‘\n’, que se conserva. • puts imprime un ‘\n’ detrás de la cadena y fputs no. UD26: Ficheros de texto Lectura y escritura de un fichero de texto Ejemplo char c; Cadena s; int i; Fichero fcar; Fichero fcad; Fichero fent; Lectura de un carácter: c = fgetc (fcar); Lectura de una cadena: fgets (s, MAXCAR, fcad) Lectura de un número entero: fscanf (fent, "%d", &i); UD26: Ficheros de texto Recorrido de un fichero de texto #include <stdio.h> typedef FILE * Fichero; … { leer r de f while (!feof(f)) { tratamiento de r leer r de f } fclose (f); void main (void) { T r; Fichero f; f = fopen (nombre_fichero, "r"); if (f == NULL) puts ("\nError en la apertura del fichero"); else … UD26: Ficheros de texto } } Recorrido de un fichero de texto Ejemplo 1 #include <stdio.h> typedef FILE * Fichero; … { c = fgetc (f); while (!feof(f)) { putchar (c); c = fgetc (f); } fclose (f); void main (void) { char c; Fichero f; f = fopen ("datos.txt", "r"); if (f == NULL) puts ("\nError en la apertura del fichero"); else … UD26: Ficheros de texto } } Recorrido de un fichero de texto Ejemplo 2 fechas.h #ifndef FECHAS_H_INCLUDED #define FECHAS_H_INCLUDED #include<stdio.h> #define TAM 25 #define TAMCAD 256 typedef struct { int dia; int mes; int anyo; } Fecha; typedef Fecha ArrayFechas[TAM]; typedef char Cadena[TAMCAD]; void leeArrayFechas(const Cadena, int *, ArrayFechas); #endif UD26: Ficheros de texto Recorrido de un fichero de texto Ejemplo 2 #include "fechas.h” void leeArrayFechas(const Cadena nombrefich, int * arrayLength, ArrayFechas array) { int i=0; FILE * f; f=fopen(nombrefich,"r"); if (f==NULL) { printf("fichero %s no encontrado",nombrefich); *arrayLength=0; } … UD26: Ficheros de texto Recorrido de un fichero de texto Ejemplo 2 … else { fscanf(f,"%d%d%d",&(array[i].dia), &(array[i].mes),&(array[i].anyo)); while (!feof(f) && i<TAM) { i++; fscanf(f,"%d%d%d",&(array[i].dia), &(array[i].mes),&(array[i].anyo)); } *arrayLength=i; fclose(f); } } UD26: Ficheros de texto