Bueno, aqui te dejo un programa que acabo de hacer. Este es el método que yo utilizo: Creo mi propia estructura de datos con
TYPE y luego creo un archivo de la forma
Var F: File of TEstructura. Como verás, estoy creando un archivo (binario) de estructura, y voy guardando registro por registro. Como este tipo de archivo no se puede abrir con
APPEND como los archivos de texto, entonces utilizo un
archivo auxiliar para no perder los datos anteriores cada vez que vaya a introducir uno nuevo. Ahora, creo que necesito limpiar el buffer, porque la primera lectura la hace bien, pero en las siguientes lecturas me salta la lectura del nombre....
Ahora explicado como funciona mi archivo, lo que pregunto es: ¿existe otra forma de guardar registros que no sea esta? Ando buscando otra forma que tambien me permita recuperar los datos cuando sea necesario... como esta...
A continuación mi código:
Uses CRT;
const fname='datos1.dat';
resp='respaldo.dat';
type persona = Record
nombre: string[10];
edad: integer;
End;
var f,r: file of persona;
k: char;
p,pa: persona;
function ExistF(fn: string):boolean;
var f: file;
Begin
{$I-}
assign(f,fn);
reset(f);
close(f);
{$I+}
ExistF:= (IOResult=0) and (fn<>'');
End;
procedure menu;
Begin
clrscr;
gotoxy(2,2);write('MENU:');
gotoxy(3,4);write('[1] >> Agregar');
gotoxy(3,5);write('[2] >> Imprimir');
gotoxy(3,6);write('[ESC] >> Salir');
gotoxy(2,8);write('Opcion: ');
k:=readkey;
End;
procedure Agregar;
Begin
clrscr;
gotoxy(2,2);write('AGREGAR DATOS');
gotoxy(2,4);write('Nombre: ');
read(p.nombre);
gotoxy(2,5);write('Edad: ');
read(p.edad);
reset(f);
rewrite(r);
while not eof(f) do
Begin
read(f,pa);
write(r,pa);
End;
close(f);
write(r,p);
close(r);
rewrite(f);
reset(r);
while not eof(r) do
Begin
read(r,pa);
write(f,pa);
End;
close(f);
close(r);
End;
procedure Imprimir;
Begin
clrscr;
reset(f);
while not eof(f) do
Begin
read(f,p);
writeln(p.nombre:15,p.edad:5);
End;
writeln('<Fin de Arvhico...>');
readkey;
close(f);
End;
Begin
assign(f,fname);
assign(r,resp);
if not existf(fname) then
Begin
rewrite(f);
close(f);
End;
while k<>#27 do
Begin
menu;
if k='1' then agregar;
if k='2' then imprimir;
End;
End.
Lo que trato es de aprender más métodos... Saludos y Gracias...