PDA

Ver la Versión Completa : problemas para validar el "enter" chr(13)


sakuragi
12-03-2004, 02:19:17
hola que tal

tengo problemas para que me acepte el enter, estoy queriendo validar el enter cuando a un texto le das enter al final del renglon

if (Pal[k]=chr(13)) then

se supone que ahi deveria entrar cuando el espacio ahi un enter pero no entrar y ya le probe con otras forma por ejemplo:

if (Pal[k]=#13) then

y tampoco me entra

si alguien me puede auxiliar se los agradeceria

de hantemano gracias (:

jachguate
12-03-2004, 06:05:09
cuando a un texto le das enter al final del renglon

Que componente es "un texto"????

En que evento queres "validar" el enter?

sakuragi
12-03-2004, 06:23:13
hola que tal


un texto en un memo por ejempplo:


program ejemplo;
uses crt;
var <----- aqui es fin del renglon y ahi un enter entonse no lo puedo validar

s:integer;



grax de antemano

jachguate
12-03-2004, 06:30:04
En un memo no hace falta "validar" el enter. Podes basarte en su propiedad Lines, del tipo TStringList. Evidentemente, habrá un retorno de carro y avance de línea al final de cada string contenido en esta propiedad.

Hasta luego.

;)

Amilius
12-03-2004, 07:19:38
En un memo no hace falta "validar" el enter. Podes basarte en su propiedad Lines, del tipo TStringList. Evidentemente, habrá un retorno de carro y avance de línea al final de cada string contenido en esta propiedad.

Hasta luego.
;)

Poderoso el TStringList.

La idea es que puedes acceder a cualquier línea como si fuera un array de cadenas, puedes intercambiar las cadenas, insertar, eliminar, etc.

Me ayudo mucho en mis trabajos para la universidad, lo usaba como reemplazo al modo "consola", para desplegar mensajes.

Me gustaba ver como los programas de mis compañeros hechos en Visual C++ corrían más lento que los mios hechos en Delphi.

Ahh y el fin de linea a veces es #10+#13 o era #13+#10 ?

jachguate
12-03-2004, 07:50:47
Tengo entendido que en windows... la sentencia correcta debe ser CR+LF (carriage return, line feed). => #13 + #10

Hasta luego.

;)

roman
12-03-2004, 16:50:29
Me gustaba ver como los programas de mis compañeros hechos en Visual C++ corrían más lento que los mios hechos en Delphi.


Con todo lo que me gusta Delphi honestamente creo que la lentitud de los programas de tus compañeros se debió más a la forma de programar que al lenguaje en sí.

// Saludos

sakuragi
16-03-2004, 03:14:58
hola que tal
gracias por responde.. pero todavia sigo teniendo problemas

no me funciona el #13+#10

los hise en un case

case pal[k] of

chr(13+10): // enter
begin
matriz[inicio,9]:='100';
inicio:=(strtoint(matriz[inicio,9]))
end;

tambien asi:

con un if

if (Pal[k]=#13+#10)then
begin
matriz[inicio,9]:='100';
inicio:=(strtoint(matriz[inicio,9]));
end;

segui el comentario que me dieron pero no me a funcionado. no se a podedido entrar ni en el case ni en el if

de hante manos gracias

jachguate
16-03-2004, 06:29:30
creo que no va a ser posible ayudarte mientras no des mas detalles de lo que queres hacer y con que componentes y/o eventos.

Me parece que no has leido mi primer mensaje. :mad:

roman
16-03-2004, 06:46:53
Este hilo ha sido poco claro desde el comienzo.

Desde el principio el compañero jachguate te preguntó en qué evento querías "validar el enter" y tu respuesta


un texto en un memo por ejempplo:


program ejemplo;
uses crt;
var <----- aqui es fin del renglon y ahi un enter entonse no lo puedo validar


es ambigua. No se sabe si quieres quieres ver la existencia de un retorno de carro al momento de que se escribe o si mas bien quieres buscar retornos de carro en un texto ya existente.

Hasta ahora no nos hemos enterado qué cosa es la variable pal. Tanto si estás validando al momento de escribir o bien el texto ya escrito, el papel de esta variable es un misterio. Si es otra cosa lo que estás intentando tendrás que aclararnoslo para que podamos saber de qué hablas.

Por el momento sólo te puedo decir que en Windows las líneas de un archivo de texto están marcadas por la secuencia de dos caracteres: #13 y #10. Una comparación con Chr(13 + 10) será siempre falsa ya Chr(13 + 10) es lo mismo que Chr(23), es decir, un sólo caracter (el de código ASCII 23) que nada tiene que ver con el retorno de carro o el avance de línea.

Te recomiendo que le des una pensada al asunto y vuelvas a expresar tu duda de forma más clara.

// Saludos

sakuragi
16-03-2004, 07:08:00
oks disculpen
pal es una variable que contiene lo siguiente:

Pal:=(memo1.Lines[numero]);

k es la variable de la posicion del caracter

con esto hagarro todo lo que esta escrito en el renglon y lo voy comparando hasta formar un token incrementado uno por uno con la variable "k" que empiesa de cero hasta el ultimo caracter del renglon.

longitud:=length(memo1.Lines[numero]); <-- total de longitud del renglon

esto lo hago para el fin de separar las palabras separadas por espacion punto y comas comas y enter esto da el fin de token ya dado el fin de token hagarro el token y lo comparo con palabras y simbolos que tengo en lisbox

Token:= token +(Pal[k]); <-- aqui sumo el caracte que va en la posiscion
inc(k);


el unico problema que he tenido al haser un token es cuando ahi un enter o fin de renglon, que es lo que le e venido preguntado por ejemplo:

program ejemplo;
uses crt;
var
s:integer;


los token program, ejemplo, punto y coma, uses , crt, s,dos puntos, integer no tengo problemas al que ser compar "var" es donde tengo problemas por que enseguida ahi un enter o fin de renglon entonses al querere con parar el caracter que sigue para ver si es fin de token es lo que no he podido validar que seria

if (pal[k]= #13) the

se supone que ahi deveria entrar =S

a la condicion para llenar la matriz de transicion donde meto el valor de enter

matriz[inicio,9]:='100';
inicio:=(strtoint(matriz[inicio,9]));

cuando token su valor es "var" se inc(k) entonses k ya es = a 4 esto seria lo que sigue despues del caracter "r" del token "var" que es lo que puse anteriormente

Token:= token +(Pal[k]); <--
inc(k);


bueno gracias espero ver sido mas claro =S

jachguate
16-03-2004, 07:15:34
Ves que hablando se entiende la gente...

Si lo que tenes es un string... ese string nunca va a tener un enter. Simplemente "termina" donde hubo un cr+lf en el archivo (o la fuente del memo).

Lo unico que tenes que verificar es que k no sea mayor a la longitud de pal, y si ya lo es, lo que tenes en Token es el último token de la línea (o un token vacio).

Hasta luego.

;)

roman
16-03-2004, 08:10:07
Además de lo que te dice el compañero (trasnochado) jachguate, me parece que de no haber abandonado el tema texto en un MEMO ...encontrar comparar (http://www.clubdelphi.com/foros/showthread.php?t=7826) podrías haber llegado más rápido a algo así como:


var
MemStream: TMemoryStream;
Parser: TParser;
Token: Char;
Line: Integer;

begin
MemStream := TMemoryStream.Create;
Memo1.Lines.SaveToStream(MemStream);
MemStream.Seek(soFromBeginning, 0);
Parser := TParser.Create(MemStream);

Line := 1;
repeat
while Line < Parser.SourceLine do
begin
Memo2.Lines.Add('<cr>');
Inc(Line);
end;

Memo2.Lines.Add(Parser.TokenString);
until Parser.NextToken = toEof;

Parser.Free;
MemStream.Free;
end;


que te separa en tokens (retornos de carro incluídos) el texto en Memo1 y los coloca como una lista en Memo2.

// Saludos

sakuragi
19-03-2004, 18:06:20
hola gracias me a servido mucho su ayuda

roman con esa forma el unico problema que he tenido es que los apostrofes no aparesen me los ignora y no e podido haser que me los despliegue ahi alguna forma?

de hante mano gracias :)