Pascal/Turbo Pascal - Urgente problemas con listas

   
Vista:

Urgente problemas con listas

Publicado por Mar (2 intervenciones) el 02/12/2008 14:00:34
Tengo que realizar un programa que lea de un fichero txt donde tiene palabras y sus definiciones separadas por saltos de líneas. Las definiciones llevan siempre un número delante. Compila pero algo le pasa al cargar el fichero ¿alguien me puede ayudar? gracias
program Diccionario;
Uses Crt;
const
esc= #27;

Type
tipo_palabra = record
palabra : string;
definicion : text;
end ;
enlace = ^nodo;

nodo =record
datos :tipo_palabra;
sig : enlace;
end;

var L, p : enlace;
tecla: char;
ruta : string;
Procedure insertar_principio_lista ( var lista, q: enlace);
begin
q^.sig := lista;
lista := q
end;
procedure inserta_nodo ( var lista, q : enlace);
var actual, anterior : enlace;
encontrado : boolean;
begin
if (lista = nil) or (q^.datos.palabra < lista^.datos.palabra) then
insertar_principio_lista (lista, q)
else
begin
anterior := lista;
actual := lista^.sig;
encontrado := FALSE;
while (actual <> nil) and (not encontrado) do
begin
if q^.datos.palabra > actual^.datos.palabra then
begin
anterior := actual;
actual := actual^.sig
end
else encontrado := TRUE;
end;
q^.sig := actual;
anterior^.sig := q
end;
end;

procedure cargar_fichero ;

var
fichero, f2 : text;
linea : string;
Begin
ClrScr;
assign (fichero, ruta); {asigna el fichero que se quiere tratar a una ruta}
{$I-}
reset(fichero);
{$I+}
if ioResult=0 then
begin
While not eof(fichero) do
new (p);
Begin
readln(fichero, linea);
if ( ord ('a') <= ord (linea[1])) and ( ord(linea[1]) <= ord ('z') ) then {comprobamos caracter}
p^.datos.palabra:= linea
else writeln('palabra no valida'); exit;
assign(f2,'p^.datos.definicion');
rewrite(f2);
while linea <> '' do
begin
readln(fichero,linea);
writeln(f2,linea);
end;
close (f2);
inserta_nodo (L, p );
end;
close (fichero);
end;
end;

procedure consultar_palabra;
var pal,C : string;
f: text;
q: enlace;
Begin
ClrScr;
gotoxy(30,5); Write('Palabra: ');
read(pal);
q:=L;
while ( q <> nil) and ( q^.datos.palabra <> pal) do
q:= q^.sig;
if q = nil then writeln('palabra no pertenece al diccionario')
else
begin
assign(f, 'q^.datos.definicion');
{$I-}
reset(f);
{$I+}
if ioresult=0 then
begin
readln(f,C);
while not eof(f) do
begin
writeln(C); readln(f,C)
end;
close (f)
end;
end;
end;
procedure lista_ordenada_palabras(q: enlace);
begin
ClrScr;
gotoxy(30,5); Write('Listado ordenado de palabras del Diccionario');
gotoxy(25,7); Write('Palabra: ');
while q <> nil do
begin
write(q^.datos.palabra);
q:= q^.sig
end;
end;

procedure listado_completo(q:enlace);
var f: text;
C : string;
begin
ClrScr;
gotoxy(30,5); Write('Listad completo de informacion del Diccionario');
q:= L;
while q <> nil do
begin
writeln(q^.datos.palabra);
assign(f, 'q^.datos.definicion');
{$I-}
reset(f);
{$I+}
if ioresult=0 then
begin
readln(f,C);
while not eof(f) do
begin
writeln(C); readln(f,C)
end;
close (f)
end;
end;
end;

procedure visualizar_diccionario;
var opcion: char;
Begin
clrscr;
gotoxy(30,5); Write('Seleccione una opcion:');
gotoxy(30,7); Writeln( '1: lista de palabras.');
gotoxy(30,8); Writeln( '2: listado completo.');
opcion:= Readkey;
case opcion of
'1': lista_ordenada_palabras(L);
'2': listado_completo(L);
else
Writeln( 'seleccion no valida.');
end
end;

procedure inserta_palabra( var B : enlace);
var f: text;
linea, C: string;
q:enlace;
begin
clrscr;
gotoxy(30,5); Write('palabra:');
Read(C);
new(q); q^.datos.palabra:= C;
assign(f,'q^.datos.definicion');
rewrite(f);readln(linea);
While linea <> '' do
begin
writeln(f,linea);
readln(linea);
end;
close (f);
inserta_nodo (L, q);
end;



Begin {inicio programa principal}
clrScr;
textbackground(blue);
gotoxy(20,10);
Writeln('Introducir la ruta del fichero (Ejemplo c:clave.txt):');
gotoxy(25,12);Readln(ruta);
L:= nil;
cargar_fichero;

Repeat
ClrScr;
gotoxy(30,5); Write('DICCIONARIO');
gotoxy(35,8); Write('1. Visualizar diccionario');
gotoxy(35,9); Write('2. Consultar_palabra');
gotoxy(35,10); Write('3. A¤adir palabra al dicionario');
gotoxy(35,12); Write('4. Salir');
gotoxy(35,13); Write('Opci¢n []');
gotoxy(43,16);
tecla:=Readkey;
case tecla of
'1':visualizar_diccionario;
'2':consultar_palabra;
'3':inserta_palabra(L);
'4':Exit
else Write('seleccion no valida')

end;

until tecla='4';
clrScr
end.
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

RE:Urgente problemas con listas

Publicado por Dani (159 intervenciones) el 03/12/2008 12:49:41
Sé más específica y no pegues todo el código.

Un saludo
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

RE:Urgente problemas con listas

Publicado por Mar (2 intervenciones) el 03/12/2008 13:18:11
Será algo más concreta. Compila correctamente pero al cargar el fichero debe haber algún error porque se queda parado sin hacer nada. No entiendo que pasa.
Haber si logras ver en la parte de cargar el fichero algún problema o alguna instrucción errónea que no se detecta en la compilación.
Gracias por tu constestación.
Saludos
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