uCharToVal()

Post Reply
FiveWiDi
Posts: 1238
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

uCharToVal()

Post by FiveWiDi »

Hola a todos,

Yo tenía entendido que haciendo esto:
uMiValor := uCharToVal( uMiValor, MiOtroValor )

uMiValor se convertía al tipo de uMiOtroValor

Es decir que si ValType( uMiOtroValor ) era N, entonces:
uMiValor := uCharToVal( uMiValor, MiOtroValor )

era lo mismo que:
uMiValor := Val( uMiValor )

Pués resulta que esto:
uMiValor := uCharToVal( uMiValor, "N" )

hace los mismo que esto:
uMiValor := uCharToVal( uMiValor, 28 )
(28 o cualquier otro número)

En fin, hace años esta función ya me hizo la pirula.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
Antonio Linares
Site Admin
Posts: 42559
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 80 times
Contact:

Re: uCharToVal()

Post by Antonio Linares »

Carlos,
/**
* Convierte una cadena de texto en un valor de un tipo específico.
*
* @param {string} cText - El texto a convertir.
* @param {string} cType - El tipo de conversión deseado ('C' para cadena, 'N' para número, 'L' para lógico, 'D' para fecha, 'M' tratado como 'C').
*
* @returns {any} - Devuelve el valor convertido según el tipo especificado o inferido.
*
* @description
* La función toma una cadena de texto y la convierte al tipo de dato especificado en `cType`.
* Si `cType` no es válido, se intenta inferir el tipo de dato.
*
* - Si `cType` es 'C', el valor devuelto es la cadena original sin espacios al inicio y al final.
* - Si `cType` es 'N', intenta convertir la cadena a un número.
* - Si `cType` es 'L', determina si la cadena representa un valor lógico ('T'/True o 'F'/False en varios idiomas).
* - Si `cType` es 'D', intenta convertir la cadena a una fecha.
* - Si no se especifica un tipo válido, se infiere el tipo a partir del contenido de `cText`.
*
* @example
* uCharToVal("123", "N") // Devuelve 123 como número
* uCharToVal("true", "L") // Devuelve .T. (true en Harbour)
* uCharToVal("2024-01-01", "D") // Devuelve una fecha
* uCharToVal("Hello", "C") // Devuelve "Hello"
*/
regards, saludos

Antonio Linares
www.fivetechsoft.com
FiveWiDi
Posts: 1238
Joined: Mon Oct 10, 2005 2:38 pm
Has thanked: 3 times
Been thanked: 4 times

Re: uCharToVal()

Post by FiveWiDi »

Supuse que andaba por ahí la cosa, y he acertado.

Muchas gracias Antonio,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
User avatar
nageswaragunupudi
Posts: 10721
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Been thanked: 8 times
Contact:

Re: uCharToVal()

Post by nageswaragunupudi »

In many cases, the function works well even without specifying the type in the 2nd parameter

Sample:

Code: Select all | Expand

function TestStr2Val()

   local aStr  := { "34512.01", "1,234.56", "3.456,34", "12.5%", "true", "FALSO",  ;
                    "10/20/2020", "25-02-1998", "10 jan 2010", "feb 15, 78" }

   SET DATE ITALIAN
   SET CENTURY ON
   FWNumFormat( "A", .t. )


   AEval( aStr, { |c,i| aStr[ i ] := { c, uCharToVal( c ), nil } } )
   AEval( aStr, { |a,i| a[ 3 ] := ValType( a[ 2 ] ) } )


   XBROWSER aStr TITLE "uCharToVal(c)" SETUP ( ;
      oBrw:cHeaders := { "FUNCTION", "RESULT", "TYPE" }, ;
      oBrw:aCols[ 1 ]:bStrData := { |x,o| 'uCharToVal( "' + o:Value + '" ) =' }, ;
      oBrw:aCols[ 1 ]:nDataStrAlign := AL_RIGHT, ;
      oBrw:aCols[ 3 ]:nDataStrAlign := AL_CENTER )

return nil
Image
Regards

G. N. Rao.
Hyderabad, India
Post Reply