Page 1 of 1
uCharToVal()
Posted: Thu Jan 30, 2025 6:20 pm
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.
Re: uCharToVal()
Posted: Thu Jan 30, 2025 9:28 pm
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"
*/
Re: uCharToVal()
Posted: Thu Jan 30, 2025 11:23 pm
by FiveWiDi
Supuse que andaba por ahí la cosa, y he acertado.
Muchas gracias Antonio,
Re: uCharToVal()
Posted: Fri Jan 31, 2025 12:13 pm
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
