[C con Clase] Manejo de archivos de texto

Salvador Pozo salvador en conclase.net
Lun Mar 3 18:09:51 CET 2014


Hola:

Los ficheros de texto son secuenciales, o al menos se deben manejar como si lo fueran.

Esto quiere decir que generalmente no es posible insertar o eliminar parte del texto de un fichero de texto.

Las excepciones son pocas: 
- Que la modificación consista sólo en añadir texto al final del fichero.
- Que la modificación no implique un cambio en la longitud de la cadena a modificar. Es decir, se puede sustituir la palabra "Hola" por "Casa", pero no por "Sol" o "Amapola".

En tu caso hay dos posibles soluciones. 

La más sencilla y habitual es crear un nuevo fichero de texto, copiar las líneas anteriores a la que se quiere modificar, añadir la línea modificada, y copiar el resto de las líneas originales hasta el final del fichero.

Una vez hecho esto se elimina el fichero original y se renombra el nuevo con el nombre del fichero eliminado.

Otra posible solución es usar una técnica de doble buffer. 
1 Se lee en un buffer parte del fichero original, por ejemplo, una línea.
2 En un segundo buffer se lee una segunda línea.
3 Si el contenido del primer buffer no se ha modificado, se escribe el en fichero.
4 Si por el contrario, se debe modificar, se escribe el contenido modificado.
5 Se copia el contenido del segundo buffer en el primero, y se lee una nueva línea en el segundo buffer.
6 El proceso se repite a partir de (3), hasta el final del fichero.

Los buffer, en realidad, no pueden ser líneas, ya que su longitud sería arbitraria, y se podría corromper parte del fichero, por ejemplo, si una línea muy corta se modifica con una línea mucho más larga.

Este método sirve para modifiaciones en las que la longitud del buffer modificado sea menor que la longitud de los dos buffers. Se suele usar para editar ficheros de texto.

Te recomiendo el primer método, que es mucho más sencillo de implementar.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net
Blog con Clase: http://blogconclase.wordpress.com
Con Clase: http://conclase.net


Más información sobre la lista de distribución Cconclase