ficheros en c

Páginas: 6 (1467 palabras) Publicado: 25 de noviembre de 2013
Funciones fgets() y fputs()

Vamos a hacer una copia de un fichero de texto. Aunque podemos copiarlo con el mismo programa que hicimos en el ejemplo de fichero binario, puesto que un fichero de texto no es más que un caso particular de fichero binario, vamos a hacerlo aquí de otra forma, específica para ficheros de texto. Esto nos servirá de excusa para presentar las funciones fgets() yfputs().

Lo primero, como siempre, será abrir los dos ficheros. El original como fichero de lectura y la copia como fichero de escritura.

#include
...
FILE *f = fopen("fichero.txt", "r");
FILE *f2 = fopen("fichero2.txt", "w");
if (f==NULL)
{
perror ("Error al abrir fichero.txt");
return -1;
}
if (f2==NULL)
{
perror ("Error al abrir fichero2.txt");
return -1;
}

Una delas posibles funciones que tenemos para leer un fichero de texto es fgets(). Esta función lee una línea completa del fichero de texto y nos la devuelve. Tiene los siguientes parámetros:

char *s: Un array de caracteres en el que se meterá la línea leída del fichero. Este array debe tener tamaño suficiente para la línea o tendremos problemas.
int n: Tamaño del array de caracteres. Si lalínea es más larga, sólo se leeran n caracteres, para no desbordar el array. Si la línea tiene menos caracteres, se meteran en el array y se pondra un fin de cadena (un \0) al final.
FILE* stream. Lo que obtuvimos con el fopen() del fichero que queremos leer.

Esta función devuelve la misma cadena de caracteres que le pasamos si lee algo del fichero o NULL si hay algún problema (fin defichero, por ejemplo).

Para leer todas las líneas consecutivamente del fichero, podemos hacer un bucle hasta que esa función fgets() nos devuelva NULL. Puede ser así

char cadena[100]; /* Un array lo suficientemente grande como para guardar la línea más larga del fichero */
...
while (fgets(cadena, 100, f) != NULL)
{
/* Aquí tratamos la línea leída */
}

Lo de distinto de NULL es una formacomo otra cualquiera de mirar cuando se termina el fichero. Si queremos podemos hacer alguna variante usando feof() o cualquier otra cosa que se nos ocurra.

Un detalle que aquí no es importante, pero que es posible que tengamos que tener en cuenta en otros casos. El caracter fin de línea (\n en linux, \r\n en windows) NO se incluye en la cadena leída. fgets() lo lee del fichero, pero NO locopia en cadena, así que no lo tenemos. En su lugar pone en en cadena un fin de cadena \0 (recuerda que en C todas las cadenas se terminan con un byte cero, que se representa como \0)

Como queremos ir escribiendo estas líneas en otro fichero, usaremos la función fputs(). Esta función escribe la cadena en el fichero y le añade un fin de línea (\n en linux, \r\n en windows).

La función fputs()admite los siguientes parámetros

char *s: El array de caracteres que queremos escribir. Se escribirán secuencialmente todos los caracteres hasta que se encuentre un fin de cadena \0
FILE *stream: Lo que obtuvimos al abrir el fichero de escritura.

Esta función devuelve el número de caracteres escritos o FEOF (un entero definido en algún include) si hay algún problema.

Nuestro códigocompleto de copia quedaría así

char cadena[100]; /* Un array lo suficientemente grande como para guardar la línea más larga del fichero */
...
while (fgets(cadena, 100, f) != NULL)
{
fputs(cadena, f2);
}

Ya sólo queda cerrar los ficheros

fclose(f);
fclose(f2);
La función fscanf()

Una de las funciones que explica cualquier libro para leer ficheros de texto es fscanf().

Laidea de fscanf es que como parámetro se le pasa el formato de lo que se quiere leer, y esta se encarga de buscarlo en el fichero y leerlo. Los parámetros de esta función son

FILE *stream: Nuevamente, lo que obtuvimos con fopen() del ficheo en cuestión.
const char *format: Formato de lo que hay en el fichero. Aquí, de una forma que vermos más abajo, se indica si en la línea hay un...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Ficheros en c ++
  • Ficheros en c++
  • Ficheros en c
  • ficheros en lenguaje C
  • Indice De Ficheros En C
  • Ficheros de texto c
  • Dec-c++ manejo de ficheros bmp
  • Ficheros en c++

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS