Pascal/Turbo Pascal - Ayuda Pascal (problemas con archivos)

 
Vista:

Ayuda Pascal (problemas con archivos)

Publicado por marco (1 intervención) el 11/08/2011 22:59:13
hola gente, tengo problema al imprimir registros en pantalla desde un archivo binario, espero q alguien pueda ayudarme.... :)

el tema es asi tengo un archivo binario ya cargado por el usuario, y cuando quiero cargar los primeros 10 registros del listado en pantalla con el ste procedimiento se me tilda el programa

les dejo la parte del codigo con el que tengo conflicto..
el programa ejecuta lo mas bien, el unico inconveniente esta en este procedure, nose q pasa

procedure CargarListado(var f: FAgenda);

var
y: integer;
reg: TAgenda;

begin
y:=9; { Ubicacion del primer registro en pantalla }
if (filesize(f)<>0)then { El archivo no esta vacio }
with reg do { Muestra los contactos }
begin
seek(f,0);
while (not eof(f)) and (y<=18) do { Imprime los primeros 10 registros }
if (not Borrado) then { Se asegura que no este dado de baja }
begin
read(f,reg);
writecenter(2,11, y, red, NumReg);
writecenter(12,34, y, lightblue, Nombre);
writecenter(35,57, y, lightblue, Apellido);
writecenter(58,80, y, lightblue, NumTel);
y:=y+1;
end;
end;
else { El archivo esta vacio }
begin
writecenter(0,80, 25, green, 'NO HAY CONTACTOS PARA MOSTRAR.');
PresionarTecla;
end;
end;

------------------------------------------------------------------------

les dejo por las dudas estas partes de codigos tbn

type

TAgenda = record
NumReg : string[10];
Nombre : string[20];
Apellido : string[20];
NumTel : string[20];
Borrado : boolean;
end;

FAgenda = file of TAgenda;

-------------------------------------------------------------------------


procedure writecenter(Xmin,Xmax,y,color: byte; texto: string);
{ Escribe un texto centrado entre dos valores Xmin y Xmax }
var
x: byte;

begin
x := Xmin + ((Xmax-Xmin) div 2) - (length(texto) div 2);
textcolor(color);
gotoxy(x,y);
write(texto);
textcolor(yellow);
end;



gracias :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda Pascal (problemas con archivos)

Publicado por ramon (2158 intervenciones) el 02/09/2011 20:24:44
{Mira el tratamiento de registros como es}

program registro;
uses
crt;
type

TAgenda = record
NumReg : string[10];
Nombre : string[20];
Apellido : string[20];
NumTel : string[20];
Borrado : boolean;
end;
FAgenda = file of TAgenda;

procedure writecenter(Xmin,Xmax,y,color: byte; texto: string);
{ Escribe un texto centrado entre dos valores Xmin y Xmax }
var
x : byte;
begin
x := Xmin + ((Xmax-Xmin) div 2) - (length(texto) div 2);
textcolor(color);
gotoxy(x,y);
write(texto);
textcolor(yellow);
end;

procedure CargarListado(var f: FAgenda);
var
y : integer;
reg: TAgenda;
nu, paso : longint;
begin
Assign(f,'** NOMBRE **'); {Nombre del Archivo}
{$I-} reset(f); {$I+} {para comprobar los errores de E/S}
if ioresult <> 0 then
begin
writeln('El Archivo Nombre X no Existe');
halt(1);
end
else
begin
paso := 0; {Contador de Registros}
nu := 10; {Registros Presentados}
y := 9;
repeat
seek(f,paso); {Apuntador de Registros}
read(f,reg); {Cargamos Registro Apuntado}
writecenter(2,11, y, red, reg.NumReg);
writecenter(12,34, y, lightblue, reg.Nombre);
writecenter(35,57, y, lightblue, reg.Apellido);
writecenter(58,80, y, lightblue, reg.NumTel);
paso := paso + 1; {Avanzamos al Siguiente Registro}
y := y + 1;
until (paso > filesize(f) - 1) or (paso > nu); {Salimos si se cumplen}
{Una o otra Condicion}
writeln;
writeln('Fin de Presentacion de Ficheros');
writeln('***** Pulse Enter ******');
readln;
close(f); {Cerramos el Archivo}
end;
{Lo archivos de registros no se tratan como archivos de texto}
{Se deve de Avanzar Registro por registro o sea seek(f,n) donde}
{n sera el registro a leer puedes leer de 0 a filesize(f) - 1 o}
{menos presentando de alante a tras o de atras a lante los registros}
{En caso de registro por registro de uno en uno}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar