necesito ayuda para realizar un diccionario en español en pascal! utilizando archivos y registro!
{Tal como pides programa corto tienes dos formas de entrar datos la activa es la mejor bajo mi punto de vista pero tu elije si te gusta la otra cambia lo espero sea esto lo que querías}
program dicionar;
uses
crt;
type
regdiccionario = record
palabra : string[20];
significado : string;
end;
var
dicci : array[1..100] of regdiccionario;
fdic : file of regdiccionario;
tecla : char;
cont : integer;
function entradadatos(d : char) : string;
var
long, i, x, y : integer;
datext : string;
begin
if (d = 'p') or (d = 'P') then
begin
gotoxy(4,4);write('Entre Palabra : ');
x := 20;
y := 4;
long := 20;
end;
if (d = 's') or (d = 'S') then
begin
gotoxy(4,5);write('Entre Significado : ');
x := 24;
y := 5;
long := 255;
end;
i := 1;
gotoxy(x,y);
repeat
tecla := readkey;
if tecla in[#29..#126,#164,#165] then
begin
datext[i] := tecla;
datext[0] := chr(i);
gotoxy(x,y);write(datext[i]);
i := i + 1;
x := x + 1;
if i > long then
i := long;
if x > 65 then
begin
y := y + 1;
x := 4;
end;
end;
if tecla = #8 then
begin
i := i - 1;
if i < 1 then
i := 1;
x := x - 1;
datext[i] := ' ';
datext[0] := chr(i);
gotoxy(x,y);write(datext[i]);
end;
until tecla = #13;
entradadatos := copy(datext,1,length(datext));
end;
function entradaread(d : char) : string;
var
long, i, x, y : integer;
datext : string;
begin
if (d = 'p') or (d = 'P') then
begin
gotoxy(4,4);write('Entre Palabra : ');
x := 19;
y := 4;
long := 20;
end;
if (d = 's') or (d = 'S') then
begin
gotoxy(4,5);write('Entre Significado : ');
x := 24;
y := 5;
long := 255;
end;
readln(datext);
if length(datext) > long then
entradaread := copy(datext,1,long)
else
entradaread := copy(datext,1,length(datext));
end;
procedure entradasdiccionario;
var
salir : boolean;
tec : char;
sa : integer;
begin
cont := 1;
salir := false;
repeat
gotoxy(2,2);write('Entrada datos al Diccionario [Enter Final Entrada]');
dicci[cont].palabra := entradadatos('p'); {entradaread('p');}
dicci[cont].significado := entradadatos('s'); {entradaread('s');}
gotoxy(4,10);write('Desea Entrar mas Datos [S/N]');
repeat
tec := readkey;
until tec in['s','S','n','N'];
if tec in['n','N'] then
salir := true
else
begin
salir := false;
cont := cont + 1;
if cont > 100 then
begin
assign(fdic,'dicciona.dic');
{$I-} reset(fdic); {$I+}
if ioresult <> 0 then
begin
rewrite(fdic);
for sa := 1 to cont do
begin
seek(fdic,sa - 1);
write(fdic,dicci[sa]);
end;
close(fdic);
cont := 1;
end
else
begin
for sa := 1 to cont do
begin
seek(fdic,filesize(fdic) + sa - 1);
write(fdic,dicci[sa]);
end;
close(fdic);
cont := 1;
end;
end;
end;
clrscr;
until salir = true;
gotoxy(4,10);write('Desea Guardar los Datos [S/N]');
repeat
tec := readkey;
until tec in['s','S','n','N'];
if tec in['s','S'] then
begin
assign(fdic,'dicciona.dic');
{$I-} reset(fdic); {$I+}
if ioresult <> 0 then
begin
rewrite(fdic);
for sa := 1 to cont do
begin
seek(fdic,sa - 1);
write(fdic,dicci[sa]);
end;
close(fdic);
cont := 1;
end
else
begin
for sa := 1 to cont do
begin
seek(fdic,filesize(fdic) + sa - 1);
write(fdic,dicci[sa]);
end;
close(fdic);
cont := 1;
end;
end;
end;
procedure buscarpalabra;
var
palab : string[20];
tama, i : longint;
encont : boolean;
tt : char;
begin
clrscr;
gotoxy(4,2);write('Busqueda Palabra');
gotoxy(4,5);write('Palabra : ');
gotoxy(14,5);readln(palab);
if length(palab) > 20 then
delete(palab,20,length(palab));
assign(fdic,'dicciona.dic');
{$I-} reset(fdic); {$I+}
if ioresult <> 0 then
begin
writeln('Archivo < diccona.dic > no Encontrado');
exit;
end
else
begin
tama := filesize(fdic) - 1;
i := 0;
encont := false;
repeat
seek(fdic,i);
read(fdic,dicci[1]);
if dicci[1].palabra = palab then
encont := true;
i := i + 1;
until (i > tama) or (encont = true);
if encont = true then
begin
clrscr;
gotoxy(4,2);write('La Palabra Fue [ ',palab,' ]');
gotoxy(4,4);write(dicci[1].palabra);
gotoxy(4,5);write(dicci[1].significado);
gotoxy(4,8);write('<< Pulse Enter >>');
repeat
tt := readkey;
until tt = #13;
end;
end;
close(fdic);
end;
procedure verdicionario;
var
puls : char;
iv, lonv : longint;
begin
assign(fdic,'dicciona.dic');
{$I-} reset(fdic); {$I+}
if ioresult <> 0 then
begin
writeln('Archivo < diccona.dic > no Encontrado');
exit;
end
else
begin
lonv := filesize(fdic) - 1;
iv := 0;
repeat
seek(fdic,iv);
read(fdic,dicci[1]);
clrscr;
writeln(' Use la Teclas [ ',chr(24),chr(25),' ] O Enter Salir');
writeln;
writeln(' ',dicci[1].palabra);
writeln(' ',dicci[1].significado);
puls := readkey;
if puls = #80 then
begin
iv := iv + 1;
if iv > lonv then
iv := lonv;
end;
if puls = #72 then
begin
iv := iv - 1;
if iv < 0 then
iv := 0;
end;
until puls = #13;
close(fdic);
end;
end;
procedure ordenardiccionario;
var
hl, il, len : longint;
tempo : regdiccionario;
begin
assign(fdic,'dicciona.dic');
{$I-} reset(fdic); {$I+}
if ioresult <> 0 then
begin
writeln('Archivo < diccona.dic > no Encontrado');
exit;
end
else
begin
len := filesize(fdic) - 1;
for il := 0 to len do
begin
seek(fdic,il);
read(fdic,dicci[1]);
for hl := len downto il do
begin
seek(fdic,hl);
read(fdic,dicci[2]);
if dicci[1].palabra > dicci[2].palabra then
begin
tempo.palabra := dicci[1].palabra;
tempo.significado := dicci[1].significado;
dicci[1].palabra := dicci[2].palabra;
dicci[1].significado := dicci[2].significado;
dicci[2].palabra := tempo.palabra;
dicci[2].significado := tempo.significado;
seek(fdic,il);
write(fdic,dicci[1]);
seek(fdic,hl);
write(fdic,dicci[2]);
end;
end;
end;
close(fdic);
end;
end;
procedure menu;
var
tl : char;
sal : boolean;
begin
sal := false;
repeat
clrscr;
gotoxy(4,2);write('*** MENU GENERAL ***');
gotoxy(4,4);write(' 1 = Entrada Datos');
gotoxy(4,5);write(' 2 = Busca Palabra');
gotoxy(4,6);write(' 3 = Ver Diccionario');
gotoxy(4,7);write(' 4 = Ordenar Diccionario');
gotoxy(4,8);write(' 5 = Salir');
tl := readkey;
if tl in[#49..#53] then
begin
clrscr;
case tl of
#49 : entradasdiccionario;
#50 : buscarpalabra;
#51 : verdicionario;
#52 : ordenardiccionario;
#53 : sal := true;
end;
end;
until sal = true;
end;
begin
clrscr;
menu;
end.