[Lazarus-es] Funci?n para convertir n?mero a cadena

Ismael L. Donis Garc?a ismael en citricos.co.cu
Mie Dic 9 23:41:14 CET 2009


Perdona que halla demorado tanto en contestar, ya que analicé bien el 
contenido de tu mensaje, donde das una explicación bien exacta de lo que hay 
que realizar.

Después de analizar lo que has expuesto logré realizar la función de 
conversión que realiza el Visual Basic 6. Tuve que convertir los datos que 
le paso a la función de UTF8 para ANSI, realizar todas las operaciones y 
para devolver los datos tuve que reconvertir de nuevo de ANSI a UTF8, como 
bien los explicas, obteniendo el resultado correcto, ósea.

UTF8 to ANSI -> Operaciones -> ANSI to UTF8 -> salida

1 Millón de Gracias Reiteradas

Sigo pendiente de como saber si una caja de texto o mejor dicho un TMaskEdit 
tiene un valor fecha verdadero o no. Veré como lo soluciono.

Otra cosa existe una forma de saber el primer y último día de un mes, algo 
así como las siguientes funciones en Visual Basic

DateSerial(2009, 12, 1)  = 01/12/2009
DateSerial(2009, 13, 0)  = 31/12/2009

Saludos Cordiales
=========
¦¦ ISMAEL ¦¦
=========
----- Mensaje original ----- 
De: "JoshyFun" <joshyfun en gmail.com>
Para: "Spanish version of Lazarus List" 
<lazarus-es en lists.lazarus.freepascal.org>
Enviado: miércoles, 09 de diciembre de 2009 12:36
Asunto: Re: [Lazarus-es] Funci?n para convertir n?mero a cadena


Hello Ismael,

Wednesday, December 9, 2009, 6:34:53 PM, you wrote:

ILDGa> De esa forma funciona pero no devuelve lo mismo.
ILDGa> Si quiere mira en pantalla para que veas: los códigos por ejemplo de 
148,
ILDGa> 149 y 156

Aquí podemos vernos con varios problemas que se quedan ocultos entre
la maraña de conversiones y codepages.

ILDGa> El problema que tengo es que tengo aplicaciones
ILDGa> corriendo en Visual Basic 6
ILDGa> y ahora no logro crear la función que me devuelva lo mismo con 
Lazarus, ya

Lo que podrías hacer por ejemplo es poner una cadena de ejemplo como
origen de datos, otra cadena con el resultado que da VB6 y cualquiera
de nosotros puede intentar realizar una función que haga la conversión
que tu esperas. Pero tenemos que daber de donde vienen los datos y en
que codificación. Por ejemplo si vienen de un textbox en Lazarus estos
vendrán en UTF-8, pero si vienen de la base de datos vendrán en ANSI
(ya que así las tienes diseñadas creo).

ILDGa> que AnsiToUTF8(Char(149)) <> Asc(149). Y esto me trae el embrollo de 
no

Eso no puede ser lo mismo nunca :) Asc(149) eso es de VB no ? Si es
así char(149)=asc(149) ya que un "char" no tiene codificación de
ningún tipo, un char es un byte que se usa en cadenas de texto.

Si quieres poner las funciones en VB6 (yo programaba en VB6, hace
tiempo pero creo que recordaré como iba) e intento hacer lo mismo en
Pascal.

Resumiendo el problema, las strings que le envias a lazarus (ojo,
lazarus no es freepascal) deben ir en UTF-8, y el contestará con UTF-8
también. Si lo que quieres es trabajar con ANSI (que es lo que veo que
necesitas) siempre que leas algo de un textbox, de un memo, o de
cualquier sitio tendrás que convertir de UTF-8 a ANSI antes de hacer
nada, y al revés si quieres enviarlo a los controles visuales.

FreePascal no es UTF-8 si no ANSI, por lo tanto las funciones que no
son visuales (son de freepascal) trabajan en ANSI, como los nombres de
ficheros y alguna cosa más.

Otras funciones de freepascal como RightStr, LeftStr, etc, trabajan en
ANSI pero se pueden usar en UTF-8 en muchos casos, pero hay que tener
cuidado porque en UTF-8 lo caracteres no tienen por qué ocupar un 1
byte, si no que pueden ocupar hasta 4 dependiendo del caracter que
sea. Así esto:

p:=pos(Cadena,'a');
r:=LeftStr(Cadena,p);

es perfectamente válido, esto:

p:=pos(Cadena,'á');
r:=LeftStr(Cadena,p);

no lo es, ya que en UTF-8 'á' son 2 bytes o 2 chars y el resultado
puede no ser el deseado.

ILDGa> poder atacar la misma base de datos con aplicaciones realizadas en 
los
ILDGa> diferentes lenguajes, cuestión esta que es
ILDGa> imprescindible para mi hasta que
ILDGa> no migre todas las aplicaciones, que de hecho son bastantes. Esto sin 
contar
ILDGa> mi conocimiento nulo de Lazarus o Delphi y por
ILDGa> consiguiente el retrazo que
ILDGa> esto trae en la migración.

Es comprensible, uno no va a cambiar una base de datos que funciona,
por lo menos por ahora.

ILDGa> Por lo que veo tendré que rehacer la función en VB6

Todo lo que puede hacer VB6 lo puede hacer Lazarus, al reves no.

PD: Por cierto, a lo del MaskEdit no te he contestado por que
desconozco totalmente el tema y no quiero dar ideas falsas.

-- 
Best regards,
 JoshyFun


_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es






More information about the Lazarus-es mailing list