PDA

Ver la Versión Completa : Problemas con un Memo


aragorneuf
04-04-2004, 19:46:41
Quiero crear una aplicación para contarel número de letras del alfabeto inglés en un texto escrito en un memo.

Pues primero segun yo tengo que contar las lineas que escribio en el Memo para eso hago esto:

Var
H: Integer;
begin
for H := 0 to Memo1.Lines.Count-1 do
// Showmessage(Memo1.Lines[H]); Solo para ver que lineas tiene.

Pero para contar las letras necesito otro for y un case pero no se como hacerle.

kinobi
04-04-2004, 20:21:21
Var
H: Integer;
begin
for H := 0 to Memo1.Lines.Count-1 do
begin
// Showmessage(Memo1.Lines[H]); Solo para ver que lineas tiene.
for ... // segundo for (anidado)
begin
...
for ... // tercer for (anidado)
begin
...
end;
...
end;
...
end;
...
end;


Saludos

aragorneuf
04-04-2004, 23:52:36
¿Pero cual es la propiedad/comando que me permite contar las letras en un memo?, por ejemplo en el edit yo uso la length y luego un case para contarlas.

__cadetill
05-04-2004, 00:32:00
pos aprovechado lo que comenta kinobi y la funcion length


Var
H: Integer;
cont: integer;
begin
cont := 0;
for H := 0 to Memo1.Lines.Count-1 do
begin
cont := cont + length(Memo1.Lines[H]);
end;


No lo he probado pero.......

aragorneuf
05-04-2004, 00:51:33
Muchas gracias, todo el dia de hoy me la he pasado haciendo programas pero como soy un super principiante cuando me trabo me trabo.

aragorneuf
05-04-2004, 01:14:28
Ya lo probe pero me cuenta todas las letras y espacios, cuando lo que yo queria era que solo me contara las letras del alfabeto ingles 'A'..'B' entonces intento hacer algo como esto:


Var
H: Integer;
cont: integer;
begin
cont := 0;
for H := 0 to M_1.Lines.Count-1 do
begin
case cont of
'A'..'Z':= length(M_1.Lines[H]);
showmessage(inttostr(cont));
end;

end;


Pero me dice que tengo este error Incompatibles types 'Integer' and 'Char' en esta linea:
'A'..'Z':= length(M_1.Lines[H]);

Espero haberme explicado bien :)

Ruben_Cu
05-04-2004, 02:45:47
Hola aragorneuf, el error te da puesto que estas comparando caracteres alfanuméricos con un valor numérico de tipo integer que es el que te devuelve la función length, revisa en la ayuda el uso del Case porque no está permitido usarlo en estos casos y cito:
The case statement provides a readable alternative to complex nested if conditionals. A case statement has the form

case selectorExpression of

caseList1: statement1;
...
caseListn: statementn;
end

where selectorExpression is any expression of an ordinal type (string types are invalid)...
Yo en este caso trataría de manejar antes la línea del memo eliminando los espacios en blanco y entonces aplicar la función length a la subcadena resultante y no hacerlo de forma directa como está planteado, para ello te puedes valer de las funciones 'Pos' y 'Delete'.
Saludos

roman
05-04-2004, 08:53:00
Además de lo que ya se ha dicho creo que podría usarse la propiedad Memo.Lines.Text para no tener que trabajar línea por línea.

// Saludos

aragorneuf
05-04-2004, 12:13:53
Ok, dejen lo checo y les digo si si me pillo.