Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Guardarme una Cadena de texto de un Memo (https://www.clubdelphi.com/foros/showthread.php?t=16566)

Nbull 02-12-2004 10:06:16

Guardarme una Cadena de texto de un Memo
 
Hola, estoy creando una aplicación que me tarifica las llamadas de una centralita telefónica, he programado la conexión por el puerto Com y veo las tramas que me manda la centralita en un Memo.
Hasta hay todo correcto, ahora lo que quiero es coger el número del que me llama, para contrastarlo y ver si lo tengo en la base de datos saber quien es etc... Bueno la cuestión es que la central me manda una trama de este tipo:

00 734 041129 1130 204 00209 0000 0 XXXXXXXXX

Las X serian el número de teléfono del que me ha llamado y la central me envia muchas tramas seguidas:( . con el siguiente codigo consigo colocar el cursor delante de la primera X:
Código Delphi [-]
with Memo1 do
 begin
    // Vamos a la linea 0, Caracter 40,que es el numero de teléfono
    selstart:=perform(EM_LineIndex,0,0)+40;
    perform(EM_SCROLLCARET,0,0);
    // Hacemos focus en el Memo
    SetFocus;
 end;

Con un For recorro todo el número de teléfono y NO se como leer el caracter que va pasando y guardarmelo, mi pregunta es:

:confused: ¿Como puedo colocarme en la linea de la primera trama no procesada?
y luego ¿Como puedo recorrer todas las lineas(tramas) que tengo en el memo?

No se si alguien podra ayudarme pero de todas formas Gracias.;)

Un Saludo.

Neftali [Germán.Estévez] 02-12-2004 10:43:56

No se si te he entendido bien, pero yo no trabajaría directamente soobre el Memo, sino sobre la propiedad Lines (que es un TStrings); Accediendo a Lines puedes hacer:

Código Delphi [-]
  Str := Memo1.Lines[i];   para acceder a cualquier línea (i)

A partir de ahí trabaja con el String Str que te será más sencillo.

Para saber cuantas líneas tienes:

Código Delphi [-]
  NumLineas := Memo1.Lines.Count;

Nbull 02-12-2004 11:15:37

Hola Neftalí, conforme dices tu como me coloco en el caracter 40 de la linea copio los 9 caracteres siguientes que seran el numero de tlf y me los guardo.

La cuestion es que yo quiero guardarme el numero de telefono de todas las llamadas que reciba, por eso tengo que coger y guardarme las XXXXXXXXX de todas las lineas, En mi base de datos contrastar el telefono nuevo con los que tengo en la base de datos y sino esta introducirlo añadiendole tambien el nombre de la empresa que llama etc...


Gracias por responder tan rapido.

Neftali [Germán.Estévez] 02-12-2004 11:30:25

Si no he entendido mal, en tu memo cada línea es de ésta forma:

00 734 041129 1130 204 00209 0000 0 XXXXXXXXX

de forma que tendrás un memo lleno de líenas de éste estilo:

00 735 445567 1454 204 00209 0000 0 XXXXXXXXX
00 734 046555 1566 204 00209 0000 0 YYYYYYYYY
00 734 041129 1130 204 00209 0000 0 ZZZZZZZZZZ

Para obtener los números debes hacer un bucle:

Código Delphi [-]
for i=0 to (Memo1.Lines.Count - 1) do begin
Str := Memo1.Lines[i];
// Sacar del String el número
.....
end;

Ésto te recorre todas las líneas del Memo, en el ejemplo anterior el bucle se hará tres veces (ya que existen 3 líneas).

Pedona, si no te he entendido bien, y no es ésta la cuestión.

Nbull 02-12-2004 11:41:40

Estas perdonado hombre lo más seguro es que no me haya explicado yo bien, pero, la cuestión es que no se sacar el numero del String, recorrer las lineas del memo si que se hacerlo lo que no se hacer es sacar del Str que tu has creado el Número.

Neftali [Germán.Estévez] 02-12-2004 11:52:36

Por eso te explicaba que hay que recorrerlas todas.

Otra opción es ir eliminandolas del Memo a medida que las vayas procesando (extaryendo el número).

Nbull 02-12-2004 12:28:00

No me entiendes, lo que te quiero decir es que una vez que has pasado la linea a la variable Str como saco de esa string los caracteres que yo quiera.

Cita:

Empezado por Neftali
Str := Memo1.Lines[i];
// Sacar del String el número
.....

Cuando tu dices //sacar del string el numero
¿Como se hace?

Por ejemplo:
si tengo

Str:=00 734 041129 1130 204 00209 0000 0 XXXXXXXXX
Como consigo yo quedarme solo con las XXXXXXXXX
No se si me habre explicado bien ahora, espero que me entiendas y puedas ayudarme.Muchos Gracias de todos Modos.Un Saludo.


llonigualker 02-12-2004 13:09:57

Una vez que tengas la linea que quieres en un string, para sacar el numero de telefono podrias usar la siguiente funcion

numerotlf:=copy(lineaguardada,40,9);

40 porque dices que empieza en la 40 el numero y 9 porque su longitud (del numero) es de 9 caracteres.

Saludos.

Nbull 02-12-2004 17:31:29

Gracias llonigualker me ha funcionado, ahora mi problema es que en el memo auxiliar que me he puesto para que me saque todos los números que haya solo me saca el de la primera linea.Mi código es este:

Código Delphi [-]
for i:=0 to (Tarificador.Lines.Count- 1) do
begin
Str:=Tarificador.Lines[i];
NumeroTlf:=Copy(Str,40,10);
Mprueba.Lines[i]:=NumeroTlf;
end;

Haber si me podeis decir que es lo que tengo mal por que ya os digo, solo me pone la primera linea de mi tarificador en Mprueba.

Gracias a los dos me habeis ayudado mucho.
Un saludo y a pasar buena tarde.;)

llonigualker 02-12-2004 21:43:28

Te falta un Mprueba.addlines o algo asi si quieres añadir lineas al memo temporal o auxiliar.

Saludos.

llonigualker 02-12-2004 21:45:05

o Mprueba.lines.add

Miralo tu en las propiedades del tmemo.

Nbull 07-12-2004 13:56:59

Muchisimas gracias Llonigualker solucione el problema, me faltaba añadir las lineas a mi Tmemo auxiliar.


Un Saludo.;)


La franja horaria es GMT +2. Ahora son las 02:11:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi