Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 13-07-2005
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Cita:
Empezado por Crandel
El problema es que con Add, lo agrega en una sóla linea a todo el texto.
Dentro de un ratito lo pruebo y te comento
En lugar de Add, se puede hacer algo tan sencillo como:
Código:
List.Text:= List.Text + TextoRecibido.
Aunque esto es computacionalmente mas costoso,
ya que se producen muchas conversiones de cadenas innecesarias.

Es preferible ir concatenando el texto en un String normal, y una vez
recibido todo el texto asignarlo una unica vez al TStringlist con un simple:
Código:
List.Text:= TextoRecibidoCompleto;
Tambien se pueden utilizar dos objetos TStringList uno para guardar los
textos parciales recibidos y otro para acumular el total usando AddStrings.
Código:
ListParcial.Text:= Socket.ReceiveText;
ListTotal.AddStrings(ListParcial);
Aunque no lo parezca este ultimo metodo (usando 2 strings) es el mas rapido
de todos y el que consume menos memoria (no lo he comprobado en la
practica, pero por la forma en que maneja delphi los strings y stringlists a
priori es el metodo que menos conversiones y reasignaciones de memoria
deberia usar).

Saludos
Responder Con Cita
  #22  
Antiguo 13-07-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Bueno KamiKaze,

aca con la ayuda de nuestros amigos delphi.com.ar y Mick, ya tenemos nuestra solución, proba entonces este código final:

Código Delphi [-]
procedure TCliente_Ogame.ClientSocket2Read(Sender: TObject; Socket: TCustomWinSocket);
var
Lineas: TStringList;
begin
   Lineas := TStringList.Create;
   Lineas.Text := Socket.ReceiveText;
   Edit1.Text := Lineas.Strings[13];
end;

Segun te entendí, recibís todo el texto de una sóla vez, o lo haces por partes?, si es por partes puedes probar la última alternativa de Mick.

Termino siendo mas facíl de lo imaginado , lo que es ahogarse en un vaso de agua vacio , tantas vueltas por un simple fin de línea
__________________
[Crandel]
Responder Con Cita
  #23  
Antiguo 14-07-2005
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Solo una pequeñas correcciones, hay que destruir el objeto TStringList al final sino tendremos un memory leak bastante grave, ya que cada vez que se ejecute la funcion se creara un nuevo stringlist que no se destruira al salir de ella.

Código:
procedure TCliente_Ogame.ClientSocket2Read(Sender: TObject; Socket: TCustomWinSocket);
var
Lineas: TStringList;
begin
   Lineas := TStringList.Create;
   try
     Lineas.Text := Socket.ReceiveText;
     Edit1.Text := Lineas.Strings[13];
   finally
     Lineas.Free;
   end; 
end;
Si se va a ejecutar muchas veces esta funcion tambien puede ser preferible tener creada con anterioridad el objeto Lineas y no destruirlo nunca, de ese modo nos ahorramos la frecuente creacion y destruccion del objeto.

Tambien seria necesario asegurarse de que existe por lo menos 13 lineas en el texto recibido, si no en el caso de recibir menos datos dara un error al intentar acceder a una linea no existente.

Saludos
Responder Con Cita
  #24  
Antiguo 14-07-2005
Kamikaze Kamikaze is offline
Miembro
 
Registrado: abr 2004
Posts: 30
Poder: 0
Kamikaze Va por buen camino
Me he quedado asombrado del apoyo que he recibido,
creo que si este no es el mejor foro en cuanto a
programación, es el foro mas solidario que hay.

Muchísimas gracias por vuestro apoyo y por
el tiempo que os he podido costar.

Ya se que no os podre recompensar de manera directa,
ya que sabeis mucho mas que yo, pero a cambio
os pondré a todos como creadores del programa,
y si este coje algo de "popularidad" os podreis ver
en la lista.

Muchas gracias a todos otra vez.

Kamikaze.

P.D.: Si alguien, por lo que sea, no desea aparecer en tal lista,
por favor hagamelo saber.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:29:41.


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
Copyright 1996-2007 Club Delphi