[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