UTNianos

Versión completa: Consulta de archivos
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola a todos, tengo que hacer un programita y un apartado me dice
Eliminar algún empleado del archivo “Empleados”.

se me ocurrieron 2 ideas:

1) Al registro a eliminar lo reemplazo por el que le siguente y asi sucesivamente, a lo ultimo como no va a leer mas registros xq llego al final del archivo tecnicamente habrian 2 registros repetidos que serian los ultimos 2....el problema es que nose como hacer para "reducir" en 1 el tamaño del archivo...no se si me explico...seria quitar el ultimo registro....

escribiendo esto se me vino una idea: que cuando llegue a NULL..reemplazar el ultimo registro por el NULL....pero noc si funcionara lo acabo de pensar recien.

2) Una recomendiacion del ayudante de la materia, es rescatar todos los registros que no son eliminados en un archivo auxiliar, y luego reemplazar el archivo "Empleados" por el auxiliar....el problema es que nose que funcion haria eso o si la hay...(sin pasar registro por registro)

Gracias por cualquier idea, aporte, sugerencia y tiempo =P.

Saludos!!!
Mmm
Yo creo que banco la idea de tu ayudante.

Los que no tengas que eliminar, los pasás a otro archivo (auxiliar)

Al archivo original después podés borrarlo: ERASE (ARCH)

Entonces en tu archivo auxiliar, tenés los que deberías tener, y listo.

Si necesitás que el archivo te quede con el nombre que tenía originalmente (dado que los datos te quedaron en un archivo auxiliar) después podés usar una función que se llama Rename. para utilizarla, previamente tenés que cerrar el archivo: CLOSE (arch)

Luego de eso, harías:

Assign(arch, 'archAux.dat');
Rename(arch, 'archOriginal.dat'); <-- este nombre sería el que tenías al principio
Para la eliminar el último registro repetido de la primera opción,

cuando el puntero del archivo quede apuntando al ultimo registro que quedo repetido, llamas a la función TRUNCATE(ARCHIVO); y todo lo que venga después, así como ese registro, quedará descartado. Luego no te olvides de llamar a CLOSE.
Lo que se me habia ocurrido es copiar todo en memoria dinamica luego eliminar el/los <nodo/s> de informacion luego "pisar el archivo ya existente con el contenido de la lista, de esa manera no necesitas crear otro archivo, de hecho es lo que normalmente se hace, una copia en memoria y luego se sebreescribe el archivo original, en el caso que vale crear otro archivo es cuando se hace apareo entre archivos.

PD: si aun no viste el tema de listas<memoria dinamica>, te sugiero que apliques lo dicho por el ayudante.

Off-topic:
Si el ayudante le sugirió lo que le sugirió, se me hace que es porque no deben saber memoria dinámica o no podían utilizarla para ese archivo
URLs de referencia