devolver lista
Publicado por nacho_fdez (1 intervención) el 18/01/2007 17:34:07
Hola a todos.tengo una pequeña duda.He echo un procedimiento en el cual le paso un fichero con varios campos,ordeno este fichero por el campo nombre mediante una lista dinamica enlazada, pero al mostrar la lista me la muestra una sola vez.Cuando quiero que me la muestre otra vez no me muestra nada.No se que esta mal.
Procedure MostrarLista(P:PNodo);
BEGIN
WHILE P <> Nil DO
BEGIN
Writeln(P^.Registro.titulo);
Readln;
P:=P^.Sig;
END;
END;
Procedure ListarFichero(VAR Fich.......);
VAR
Nuevo,P,Anterior:PNodo;
fin:boolean;
Clave:integer;
BEGIN
PosicionC:=0;
WHILE NOT EOF (Fich) DO
BEGIN
Seek(Fich,PosicionC);
Read(Fich,bucketC);
New(Nuevo);
Nuevo^.Registro:=bucketC.lista_reg_C[j];
Nuevo^.Sig:=Nil;
Anterior:=Nil;
IF Primero = Nil THEN
BEGIN
Primero:=Nuevo;
END
ELSE
BEGIN
P:=Primero;
fin:=false;
WHILE (P <> Nil) AND (NOT fin) DO
BEGIN
IF P^.Clave < Nuevo^.Clave THEN
BEGIN
Anterior:=P;
P:=P^.Sig;
END
ELSE
BEGIN
IF (Anterior<>Nil) THEN
BEGIN
Anterior^.Sig:=Nuevo;
Nuevo^.Sig:=P;
fin:=true;
END
ELSE
BEGIN
Nuevo^.Sig:=P;
Primero:=Nuevo;
fin:=true;
END;
END;
END;
IF NOT fin THEN
BEGIN
Anterior^.Sig:=Nuevo;
Nuevo^.Sig:=Nil;
END;
END;
END;
PosicionC:=PosicionC+1;
END;
MostrarLista(Primero);
END;
.................
MENU:
......
3: BEGIN
Primero:=Nil;
fin:=false;
ListarFichero(THash_C,OV_C);
END;
Si alguien me puede ayudar por favor.Gracias
Procedure MostrarLista(P:PNodo);
BEGIN
WHILE P <> Nil DO
BEGIN
Writeln(P^.Registro.titulo);
Readln;
P:=P^.Sig;
END;
END;
Procedure ListarFichero(VAR Fich.......);
VAR
Nuevo,P,Anterior:PNodo;
fin:boolean;
Clave:integer;
BEGIN
PosicionC:=0;
WHILE NOT EOF (Fich) DO
BEGIN
Seek(Fich,PosicionC);
Read(Fich,bucketC);
New(Nuevo);
Nuevo^.Registro:=bucketC.lista_reg_C[j];
Nuevo^.Sig:=Nil;
Anterior:=Nil;
IF Primero = Nil THEN
BEGIN
Primero:=Nuevo;
END
ELSE
BEGIN
P:=Primero;
fin:=false;
WHILE (P <> Nil) AND (NOT fin) DO
BEGIN
IF P^.Clave < Nuevo^.Clave THEN
BEGIN
Anterior:=P;
P:=P^.Sig;
END
ELSE
BEGIN
IF (Anterior<>Nil) THEN
BEGIN
Anterior^.Sig:=Nuevo;
Nuevo^.Sig:=P;
fin:=true;
END
ELSE
BEGIN
Nuevo^.Sig:=P;
Primero:=Nuevo;
fin:=true;
END;
END;
END;
IF NOT fin THEN
BEGIN
Anterior^.Sig:=Nuevo;
Nuevo^.Sig:=Nil;
END;
END;
END;
PosicionC:=PosicionC+1;
END;
MostrarLista(Primero);
END;
.................
MENU:
......
3: BEGIN
Primero:=Nil;
fin:=false;
ListarFichero(THash_C,OV_C);
END;
Si alguien me puede ayudar por favor.Gracias
Valora esta pregunta


0