tengo que en un programa hacer lo siguiente.
Desarrollar un analizador de textos que dado un texto permita obtener información referida a las palabras, caracteres y números que contiene.
Se utilizará la interfaz de la Figura 5 formada por un MainMenu, un ToolBar y un Memo.
El menú se detalla en la Figura 6. El texto a analizar puede ingresarse directamente en el Memo desde teclado o cargarse desde un archivo existente a través de la opción „Archivo\Abrir’ del menú principal.
La opción „Archivo\Guardar como…’ permite ingresar un nombre de archivo para guardar el texto del Memo. Si se selecciona „Archivo\Guardar’ se salvará con el último nombre de archivo ingresado; si no existe ninguno deberá realizar las mismas acciones que
Seminario de Lenguajes – Opción Delphi – Curso 2011
4
‘Archivo\Guardar como …’. Los botones del ToolBar que aparecen debajo del menú comparten los eventos con las opciones correspondientes.
El análisis a realizar corresponde a la opción ‘Estadística’ del menú principal cuyo detalle se observa en la figura 7.
Figura 5
Figura 6
Figura 7
Algunos detalles a tener en cuenta:
- Las imágenes que aparecen en el menú y en los botones están caragdas en un componente TImageList.
- Sobre el Memo, a la derecha, aparece el último nombre de archivo ingresado. Este nombre será el que se utilice para guardar si se selecciona ‘Archivo\Guardar’.
- Las opciones para guardar el texto permanecen deshabilitadas mientras el Memo esté vacío.
- Se asume que los números enteros no utilizan signos de puntuación (ej: coma o punto para separar los miles).
Mi codigo esta dividido en 3 forms,
Código Delphi
[-]unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ImgList, StdCtrls, ToolWin, ComCtrls, ExtDlgs;
type
TCuatro = class(TForm)
MainMenu1: TMainMenu;
Archivo1: TMenuItem;
Abrir1: TMenuItem;
Guardar1: TMenuItem;
Guardarcomo1: TMenuItem;
N1: TMenuItem;
Salir1: TMenuItem;
Estadisticas1: TMenuItem;
LetrasNmeros1: TMenuItem;
Palabras1: TMenuItem;
ToolBar1: TToolBar;
Button1: TButton;
Button2: TButton;
ImageList1: TImageList;
Memo: TMemo;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure LetrasNmeros1Click(Sender: TObject);
procedure Palabras1Click(Sender: TObject);
procedure MemoChange(Sender: TObject);
private
public
end;
var
Cuatro: TCuatro;
implementation
uses Unit4, Unit3;
{$R *.dfm}
procedure TCuatro.Button1Click(Sender: TObject);
begin
if (OpenDialog1.Execute) then
begin
Guardar1.Enabled := true;
Memo.lines.loadfromfile(OpenDialog1.filename);
end;
end;
procedure TCuatro.Button2Click(Sender: TObject);
begin
if (SaveDialog1.Execute) then
begin
Memo.lines.savetofile(SaveDialog1.filename);
end;
end;
procedure TCuatro.LetrasNmeros1Click(Sender: TObject);
begin
form3.ShowModal;
end;
procedure TCuatro.Palabras1Click(Sender: TObject);
begin
Form4.ShowModal;
end;
procedure TCuatro.MemoChange(Sender: TObject);
begin
Button2.Enabled := false;
Guardar1.Enabled := false;
Guardarcomo1.Enabled := false;
if Memo.lines.Count <> 0 then
begin
Button2.Enabled := true;
Guardar1.Enabled := true;
Guardarcomo1.Enabled := true;
end;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2;
type
TForm3 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Cletras: TLabel;
CDLetras: TLabel;
CVocales: TLabel;
CConsonantes: TLabel;
Centeros: TLabel;
CFlotantes: TLabel;
procedure FormActivate3(Sender: TObject);
private
public
end;
const
setnum = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
voc = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'U', 'á', 'é', 'í', 'ó', 'ú',
'Á', 'É', 'Í', 'Ó', 'Ú'];
cons = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'ñ', 'p', 'q',
'r', 's', 't', 'v', 'w', 'x', 'y', 'z', 'B', 'C', 'D', 'F', 'G', 'H', 'J',
'K', 'L', 'M', 'N', 'Ñ', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'X'];
var
Form3: TForm3;
implementation
procedure TForm3.FormActivate3(Sender: TObject);
var
letras: set of char;
num, mem: string;
cletdist, ccons, cvoc, cent, clet, cflot, i, a, b: integer;
ok1, ok2: boolean;
begin
letras := voc + cons;
cletdist := 0;
ccons := 0;
cvoc := 0;
cent := 0;
clet := 0;
cflot := 0;
i := 0;
CDLetras.caption := inttostr(cletdist);
CConsonantes.caption := inttostr(ccons);
CVocales.caption := inttostr(cvoc);
Centeros.caption := inttostr(cent);
Cletras.caption := inttostr(clet);
CFlotantes.caption := inttostr(cflot);
mem := cuatro.memo.lines.text;
while (length(mem) >= i) do
begin
if (mem[i] in voc) then
cvoc := cvoc + 1
else if (mem[i] in cons) then
ccons := ccons + 1;
clet := clet + 1;
if (mem[i] in letras) then
begin
cletdist := cletdist + 1
end;
i := i + 1;
end;
i := 0;
while (length(mem) >= i) do
begin
a := 0;
while (length(mem) >= i) and (mem[i] <> ' ') do
begin
if (mem[i] in setnum) or (mem[i] = ',') then
begin
num[a] := mem[i];
a := a + 1;
end;
i := i + 1;
end;
b := 0;
ok1:=false; ok2:=false;
while (length(num) <= a) do
begin
if (num[b] in setnum) then
begin
ok1 := true;
b := b + 1
end
else if (num[b] = ',') then
begin
b := b + 1;
if (num[b] in setnum) and (b <= length(num)) then
ok2 := true;
end;
end;
if (ok1) and (ok2) then
cflot := cflot + 1
else if (ok1) then
cent := cent + 1;
i := i + 1;
end;
CDLetras.caption := inttostr(cletdist);
CConsonantes.caption := inttostr(ccons);
CVocales.caption := inttostr(cvoc);
Centeros.caption := inttostr(cent);
Cletras.caption := inttostr(clet);
CFlotantes.caption := inttostr(cflot);
end;
{$R *.dfm}
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, unit2;
type
TForm4 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Cpalablras: TLabel;
Cdistpalabras: TLabel;
Pmaslarga: TLabel;
Cantmaslarga: TLabel;
procedure FormActivate4(Sender: TObject);
private
public
end;
const
setnum = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
voc = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'U', 'á', 'é', 'í', 'ó', 'ú',
'Á', 'É', 'Í', 'Ó', 'Ú'];
cons = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'ñ', 'p', 'q',
'r', 's', 't', 'v', 'w', 'x', 'y', 'z', 'B', 'C', 'D', 'F', 'G', 'H', 'J',
'K', 'L', 'M', 'N', 'Ñ', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'X'];
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.FormActivate4(Sender: TObject);
const
finvector=99999;
type
arreglo = array [1 ..finvector] of string;
var
ok:boolean;
vector:arreglo;
comp,mem, max:string;
i, dl,n, cp, cmpal:integer;
begin
for i := 1 to finvector do
vector[i]:='';
dl:=0;
max:='';
cp:=0;
i:=0;
mem:=cuatro.memo.lines.text;
while(length(mem)<=i)do
begin
comp:='';
ok:=(length(mem)<=i)and(mem[i]<>' ')and(mem[i]<>',')and(mem[i]<>'.')and
not(mem[i] in cons);
while(ok)do
begin
if(mem[i] in voc)or (mem[i] in cons)then
begin
comp:=comp+mem[i];
end;
i:=i+1;
end;
ok:=(length(mem)<=i)and(mem[i]<>' ')and(mem[i]<>',')and(mem[i]<>'.')and
not(mem[i] in cons);
while not(ok)do
i:=i+1;
ok:=true;
n:=0;
while(n
and(ok)do
begin
n:=n+1;
if(vector[n]='')then
begin
ok:=false;
vector[n]:=comp;
dl:=dl+1;
end
else
begin
if(vector[n]<>comp)then
cp:=cp+1;
end;
end;
if(length(comp)>length(max))then
begin
max:=comp;
cmpal:=1;
end
else
if(length(comp)=length(max))and(comp=max)then
cmpal:=cmpal+1;
end;
Cdistpalabras.Caption:=inttostr(dl);
pmaslarga.Caption:=max;
cantmaslarga.Caption:=inttostr(cmpal);
cpalablras.caption:=inttostr(cp);
end;
end.
espero que se entienda... es mi primer pregunta. gracias de antemano, quien quiera me dice y lo cargo en una pagina dentro de un rar, para qe puedan ejecutarlo o algo... pero no logro solucionarlo.
Ahi esta el ejercicio:
descarga