Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-01-2009
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
Problemas en D7 con cadenas grandes

Hola a todos.
Me esta ocurriendo el siguiente problema y quisiera conocer si a alguien mas le ha ocurrido y si encontro una solucion mejor.
He estado concatenando cadenas y cuando estas son muy largas se me llena de basura la cadena. Es decir se empieza a llenar de caracteres raros.
Estoy usando un codigo + o - como el que sigue:

k := '';
for i:= 0 to miTstringlist.count -1 do
Begin
k := k + miTstringlist[i]
end;

- En este punto el valor de k puede tener valores incoherentes cuando la cadena es muy larga.


Paradojicamente esto me ocurre en D7, sin embargo ese mismo codigo, o sea los mismos archivos .pas, los compilo en D2006 y no da problemas.

A alguien le ha ocurrido algo parecido.???

Yo supongo que sea algun error en la manipulacion de las cadenas que tiene D7 cuando estas son muy largas.

He salvado para disco el contenido del stringlist y todo esta OK.
La mareadera solo ocurre cuando el tamanyo de k es muy largo.

Cualquier comentario es bienvenido.

Gracias a todos por su tiempo.
JCarlos
Responder Con Cita
  #2  
Antiguo 30-01-2009
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
oie, la verdad no lo he probado, ya que no tengo el delphi instalado, mañana lo instalo XD, pero a simple vista podría decir, que puede que te de caracteres raros porque la variabe "k" es de tipo "String" y no lo puedes sumar en esta parte: k := k + miTstringlist[i], si quieres sumar grandes cantidades, puedes usar variables de tipo: Extended, Int64 u otro...
Acerca de o de delphi 2006 nose porque ahí te toma bien..será que el delphi 7 tiene problemas que en las otras versiones corrigieron.

PD: ¿porque no te cambias a d2006?

54Lu2
Responder Con Cita
  #3  
Antiguo 30-01-2009
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Se te llena de caracteres raros porque esta mal.

Código Delphi [-]
 
k := '';
for i:= 0 to miTstringlist.count -1 do
Begin
k := k + miTstringlist[i]
end;

La solucion es

Código Delphi [-]
 
k := '';
for i:= 0 to miTstringlist.count -1 do
Begin
k := k + miTstringlist.Strings[i]
end;

Saludos.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #4  
Antiguo 02-02-2009
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
Voy a probar lo que me comentas.
Pero.
Porque cuando la cadena K resultante no es muy larga funciona bien.???

Solo se marea cuando la cadena K es del orden 1000 caracteres en adelante o algo asi.

Ademas segun la documentacion de Delphi

miTstringlist[i]

es equivalente a:

miTstringlist.Strings[i]

Por cierto, la primera parte de la cadena si queda correctamente pero como les comentaba a partir de la posicion mil + o - empieza a poner caracteres erroneos.

Si, una variante es cambiarme para D2006, pero tengo una serie de componentes los cuales estan bien probados en D7 y no lo estan estan para D2006.

Saludos y gracias a todos por la pronta respuesta.
JCarlos

Última edición por JCarlosas fecha: 02-02-2009 a las 18:20:11.
Responder Con Cita
  #5  
Antiguo 02-02-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Hola!

¿Cómo estás determinando lo que dices? ¿Mediante alguna de las ventanas de depuración?

¿Qué pasa si le asignas dicha cadena a un componente Memo, por ejemplo? ¿Qué aparece dentro del cuadro de texto?

En alguna ocasión me pareció notar que la ventana Evaluate/Modify del depurador tenía algunos problemas para mostrar cadenas de gran longitud.

Saludos.

Al González.
Responder Con Cita
  #6  
Antiguo 02-02-2009
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
Bueno la forma de detectarlo fue en primer lugar para algunos casos el programa tenia un comportamiento raro para algunos datos de entrada.
Despues me puse a depurarlo y constate que se estaba llenando de basura parte del string.
Los valores dentro del stringlist sé que estaban correcto pues salve el contenido del stringlist para fichero y estaban OK.
El problema era solamente durante la concatenacion de la cadena.
Despues de varias pruebas no me quedaba mas que echarle la culpa al D7 y lo probe en el D2006 y todo fue OK.
El programa corrio OK y ademas cuando lo depuraba desde el D2006 no me mostraba las cacharras.
Y siempre me quedo la duda si a alguien le habia ocurrido eso con anterioridad en D7.

Y sí, en otras ocasiones he tenido problemas con el "Evaluate/Modify" al mostrar las cadenas, pero usualmente lo que me ha pasado es que me las truncaba el "Evaluate/Modify" pero no que llenara de cacharras parte de la cadena.

Saludos.
JCarlos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
problemas para comparar 2 cadenas spyfenix OOP 2 18-12-2007 17:44:48
try-except - grandes problemas pmfras Conexión con bases de datos 1 12-06-2007 02:53:33
Problemas al insertar cadenas que contienen el caracter ´ Isnel Firebird e Interbase 7 13-10-2006 17:58:12
Problemas por sumas de valores grandes CamiloU Varios 4 23-06-2006 00:12:01
Problemas al Isertar Cadenas con SQLQuery de DBExpress chivofbv Conexión con bases de datos 0 10-11-2004 19:53:35


La franja horaria es GMT +2. Ahora son las 22:56:34.


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