PDA

Ver la Versión Completa : Problemas en D7 con cadenas grandes


JCarlosas
29-01-2009, 22:17:53
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

cmm07
30-01-2009, 01:08:14
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

MaMu
30-01-2009, 04:09:09
Se te llena de caracteres raros porque esta mal.


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


La solucion es


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


Saludos.

JCarlosas
02-02-2009, 18:15:02
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

Al González
02-02-2009, 18:44:16
¡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. :)

JCarlosas
02-02-2009, 20:43:41
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