 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
farfala04 Invitado
|
Publicado: Vie 28 May, 2004 12:01 pm Asunto: Eliminar un registro(con varios campos) de un txt |
|
|
Hola a todos:
Alguien tiene código o sabe alguna manera de eliminar un registro?
Se me ocurren dos formas:
1.-Hacer un fichero aux sin ese registro, eliminar el mío y luego renombrarlo.
2.-Coger los demás registros y adelantarlos una posición. El problema es que el último registro me quedaría duplicado y no se eliminarlo.
La segunda forma me parece muy interesante, si podeis ayudarme...os lo agradezco. |
|
| Volver arriba |
|
 |
masBecas Lt

Registrado: 23 Oct 2003Mensajes: 98Ubicación: La Laguna, Tenerife
|
Publicado: Vie 28 May, 2004 12:35 pm Asunto: |
|
|
Hola
En tu pregunta no explicas qué tipo de fichero estás usando, aunque por el "asunto" presupongo que se trata de un fichero plano de texto.
Lo que te voy a decir es simple teoría de Bases de Datos, así que tú decidirás si aplicarlo a tu caso concreto o no.
De las dos soluciones que nombras, ninguna es excesivamente eficientes:
- La primera presupone crear un nuevo fichero pasando todo el contenido del primero. Aparte de los problemas de espacio que puede ocasionarte tener momentáneamente duplicado todo tu fichero, debes tener en cuenta que hay que tener mucho cuidado en asegurarse que la copia haya sido correcta. Cualquier fallo en el proceso que no controles puede provocar que la copia sea inservible.
- La segunda solución tiene un grave problema de ineficiencia. Imagina que borras el primer registro: tienes que desplazar TODOS los demás una posición, y esto es bastante costoso en tiempo. Simplemente el hecho de desplazar todos los registros posteriores cada vez que borras uno haría que la operación de borrado tardara un tiempo considerable.
Las soluciones que emplean las BBDD suelen basarse en NO eliminar realmente el registro. Simplemente lo MARCAN como eliminado (con un campo especial o con una cadena de bits específica...). Después añaden utilidades para COMPACTAR la base de datos, eliminando definitivamente estos registros (tal como hace tu segunda propuesta). La diferencia es que esta compactación no se realiza cada vez que elimines un registro (con el consiguiente costo en tiempo), sino sólo cuando el usuario lo elija o cada cierto tiempo prefijado. Otra ventaja de marcar los registros en lugar de eliminarlos es que, en caso de equivocación puedes recuperarlos (al menos hasta compactar).
En todo esto, estoy suponiendo que tu fichero tiene un tamaño considerable. Si ocupa sólo unos cientos de Kbs puedes olvidarte de todo esto y aplicar tu segunda propuesta de la forma que quieras (en ningún caso te recomiendo la primera). |
|
| Volver arriba |
|
 |
Invitado
|
Publicado: Sab 29 May, 2004 9:37 am Asunto: Re: Eliminar un registro(con varios campos) de un txt |
|
|
| farfala04 escribió: | Hola a todos:
Alguien tiene código o sabe alguna manera de eliminar un registro?
Se me ocurren dos formas:
1.-Hacer un fichero aux sin ese registro, eliminar el mío y luego renombrarlo.
2.-Coger los demás registros y adelantarlos una posición. El problema es que el último registro me quedaría duplicado y no se eliminarlo.
La segunda forma me parece muy interesante, si podeis ayudarme...os lo agradezco. |
|
|
| Volver arriba |
|
 |
farfala04 Invitado
|
Publicado: Sab 29 May, 2004 9:45 am Asunto: |
|
|
| Muchas gracias. He decidido que lo mejor es lo de 'compactar', porque, qué es que no hay una función que elimine unos bytes de un fichero txt, o que cambie el tamaño que ocupa el fichero, o que pueda situarme el eof donde yo quiera; ésta sería otra manera de hacerlo si adelanto todos los registros una posición y dejo el último duplicado. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|