eliminar linea txt c++

christina_nigel
25 de Junio del 2006
hola

alguien tiene un codigo de ejemplo para ver como se elimina una linea de una archivo de texto?

necesito hacer una agenda y estoy atorada en la parte de eliminar un registro que se busca primero

agradecere su cooperacion gracias

hiei
25 de Junio del 2006
Tienes varias opciones que se van complicando cada vez mas en pos de la eficiencia:

1) La menos eficiente:
Crear un archivo temporal .TXT donde pases todas las lineas menos la que quieras eliminar... luego borras el archivo original y renombras el nuebo... (malo... muy malo...)

2) Usar un caracter de marca al principio de la linea (digamos el '#' para decir que es una linea invalida y un espacio en blanco para decir que es valida) y cambiar el caracter de valido por el de invalido cuando se quiera eliminar un registro... Luego periodicamente 'compactas' el archivo borrando las lineas invalidas como en el caso 1 (en realidad no las borra... copia todas las lineas validas a un archivo nuebo borrando el viejo) Mas eficiente... pero igualmente feo...

3) Trabajar en la memoria. Lo mejor, lo mas recomendable, lo mas simple... pero tambien lo mas caro en recursos... tienes que tener un arrego con todo el archivo en memoria (dificil si el sistema operativo no dispone de mmap y el archivo es grande...) Es evidente... lo copias todo a la memoria, buscas la pocicion a eliminar y luego donde termina el registro... con esos datos copias los datos que van desde el final del registro al final del archivo al principio del registro... y copias de nuevo al archivo todo el tamaño de la memoria que tiene los datos menos el tamaño del registro que eliminaste...

Rutinas utiles:
/* Reemplaza el caracter de la posicion pos en el archivo por c */
void poner_caracter_en( FILE *f, char c, long pos ) {
long p = ftell(f);
fseek( f, pos, SEEK_SET );
fputc( c, f );
fseek( f, p, SEEK_SET );
putch( c );
}

Bueno... no se me ocurren mas... pero dime por cual te desides y vere de alludarte... codigo entero desgraciadamente o tengo ahora... te aclaro que hay mas opciones... pero todas van en aumento de dificultad...