Programación General > Pascal
Escribir En Texto
pere:
JE JE JE supongo que no hay ninguno para pardillos y con el que tengo no me entero demasiado, por eso:
-Podríais ponerme un ejemplo claro de como utilizar el procedimiento seek() ? a ver si me entero....
-Dices que con el procedimiento seek puedes desplazarte aleatoriamente, y una vez posicionado, de que manera realizo la lectura del valor de este registro para yo poder hacer las operaciones que sean necesarias?
No se si me explico con claridad disculpen las molestias.
-DriverOp-:
Hola pere.
El mejor libro de TP7 que he leído es el de Joyanes, no por nada es un clásico dentro del mundo Pascal en habla española.
http://www.agapea.com/Programacion-en-Pascal-n313327i.htm
--- Citar ----Podríais ponerme un ejemplo claro de como utilizar el procedimiento seek() ? a ver si me entero....
--- Fin de la cita ---
Seguro!, aquí está:
Suponiendo que el nombre lógico del archivo es Arch.
--- Código: Text --- { ir al quinto registro }Seek(Arch,4); Read(Arch, Reg); El órden lógico de registros comienza en cero.
--- Código: Text --- { ir al primer registro }Seek(Arch,0);Read(Arch,Reg);
--- Código: Text --- { ir al último registro }Seek(Arch, FileSize(Arch)-1);Read(Arch,Reg); FileSize devuelve el número de registros en el archivo teniendo en cuenta que si el archivo tiene un solo registro, es decir, el registro número cero, FileSize en ese caso devuelve 1, si le pasas como parámetro a Seek lo que devuelve FileSize() te irás a la posición siguiente al último registro, menos uno, estarás parado listo para leer el último registro.
Ahora bien, si quieres agregar un registro al archivo puedes aprovechar FileSize así:
--- Código: Text --- { agrega un registro al final }Seek(Arch,FileSize(Arch));Write(Arch,Reg); Como decía, el segundo parámetro de Seek() es la posición lógica del registro en el que se para. Si quieres saber en qué posición estás puedes usar la función FilePos(Arch); que devuelve un tipo Longint:
--- Código: Text --- Seek(Arch,10);writeln('El puntero del archivo apunta al registro número: ',FilePos(Arch));
Recuerda además que Read() lee el registro actual y luego avanza el puntero, de forma tal que:
--- Código: Text --- Seek(Arch,10);writeln('El puntero del archivo apunta al registro número: ',FilePos(Arch));Read(Arch,Reg);writeln('Ahora el puntero del archivo apunta al registro número: ',FilePos(Arch));
Lo mismo pasa con Write(), escribe/sobreescribe en la posición actual y avanza el puntero.
No es molestia. Saludos.
pere:
muchisimas gracias por la rocomendación del libro y gracias por la explicación que ahora si que me haquedado claro como tengo que hacerlo.
Bueno a medida que vaya añadiendo cosas al programa seguro que iré preguntando mas cosas, otra vez gracias.
Navegación
[*] Página Anterior
Ir a la versión completa