Función para extraer cadena numérica
- VictorCasajuana
- Posts: 269
- Joined: Wed Mar 28, 2018 4:38 pm
- Location: Vinaròs
- Has thanked: 1 time
- Contact:
Función para extraer cadena numérica
Hola.
Estoy enfrascado en un tema que no le veo la punta y seguro será simplón pero no he trabajado nunca de esta forma.
Tengo un control que activa opciones mediante un número, por ejemplo:
Opción 1 : valor 1
Opción 2 : valor 2
Opción 3 : valor 4
Opción 4 : valor 8
y así sucesivamente.
El control me devuelve un número según las opciones que se hayan activado, por ejemplo si se activa la opción 2 y opción 4, me devuelve 2 + 8 = 10
Con el dato 10 tengo que extraer el 2 y el 8
He probado la función IsBit() pero no acaba de cuadrarme bien.
Al tener un desconocimiento total de este tipo de funciones y antes de reinventar la rueda haciendo una función para ello, pregunto por si alguien me puede dar una pista de si FWH ya lleva algo que procese este tipo de datos.
Gracias de antemano y salud!
Estoy enfrascado en un tema que no le veo la punta y seguro será simplón pero no he trabajado nunca de esta forma.
Tengo un control que activa opciones mediante un número, por ejemplo:
Opción 1 : valor 1
Opción 2 : valor 2
Opción 3 : valor 4
Opción 4 : valor 8
y así sucesivamente.
El control me devuelve un número según las opciones que se hayan activado, por ejemplo si se activa la opción 2 y opción 4, me devuelve 2 + 8 = 10
Con el dato 10 tengo que extraer el 2 y el 8
He probado la función IsBit() pero no acaba de cuadrarme bien.
Al tener un desconocimiento total de este tipo de funciones y antes de reinventar la rueda haciendo una función para ello, pregunto por si alguien me puede dar una pista de si FWH ya lleva algo que procese este tipo de datos.
Gracias de antemano y salud!
--------
¿ Y porque no ?
¿ And why not ?
¿ Y porque no ?
¿ And why not ?
- Antonio Linares
- Site Admin
- Posts: 42520
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact:
Re: Función para extraer cadena numérica
Victor,
Puedes usar las propias funciones de Harbour:
? hb_bitAnd( 10, 2 )
? hb_bitAnd( 10, 8 )
Si escribes 10 en binario obtemos esto (puedes usar la calculadora de Windows en modo programador): "1010"
hb_bitAnd( 10, 2 ) intenta hacer un "and" del bit segundo entre "1010" y "10" (dos en binario). Efectivamente ambos tienen el bit "segundo" encendido y devuelve 2 (que es el valor "10")
hb_bitAnd( 10, 8 ) intenta hacer un "and" del bit cuarto entre "1010" y "1000" (ocho en binario). Efectivamente ambos tienen el bit "cuarto" encendido y devuelve 8 (que es el valor "1000")
También tienes la funcion hb_bitOr() que te permite hacer operaciones "or" en vez de operaciones "and".
Por ejemplo ? hb_bitOr( 10, 5 ) devuelve 15 (que es el valor binario "1111") que seria la "unión" de "1010" y "0101" (5)
Puedes usar las propias funciones de Harbour:
? hb_bitAnd( 10, 2 )
? hb_bitAnd( 10, 8 )
Si escribes 10 en binario obtemos esto (puedes usar la calculadora de Windows en modo programador): "1010"
hb_bitAnd( 10, 2 ) intenta hacer un "and" del bit segundo entre "1010" y "10" (dos en binario). Efectivamente ambos tienen el bit "segundo" encendido y devuelve 2 (que es el valor "10")
hb_bitAnd( 10, 8 ) intenta hacer un "and" del bit cuarto entre "1010" y "1000" (ocho en binario). Efectivamente ambos tienen el bit "cuarto" encendido y devuelve 8 (que es el valor "1000")
También tienes la funcion hb_bitOr() que te permite hacer operaciones "or" en vez de operaciones "and".
Por ejemplo ? hb_bitOr( 10, 5 ) devuelve 15 (que es el valor binario "1111") que seria la "unión" de "1010" y "0101" (5)
- Antonio Linares
- Site Admin
- Posts: 42520
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 31 times
- Been thanked: 75 times
- Contact:
Re: Función para extraer cadena numérica
Si prefieres usar las funciones de FWH lo harías asi:
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
MsgInfo( IsBit( 10, 2 ) ) // está encendido el segundo bit del valor 10 ?
MsgInfo( IsBit( 10, 4 ) ) // está encendido el cuarto bit del valor 10 ?
return nil
- Carles
- Posts: 1149
- Joined: Fri Feb 10, 2006 2:34 pm
- Location: Barcelona
- Been thanked: 7 times
- Contact:
Re: Función para extraer cadena numérica
V,
Creo q esta ebtrada del amic Biel te servira...
https://bielsys.blogspot.com/2015/01/ma ... rbour.html
Salut.
C.
Creo q esta ebtrada del amic Biel te servira...
https://bielsys.blogspot.com/2015/01/ma ... rbour.html
Salut.
C.
Salutacions, saludos, regards
"...programar es fácil, hacer programas es difícil..."
UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
"...programar es fácil, hacer programas es difícil..."
UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
- nageswaragunupudi
- Posts: 10721
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Been thanked: 8 times
- Contact:
Re: Función para extraer cadena numérica
Code: Select all | Expand
function ValSplit( nTotal )
local aResult := {}
local n := 1
DEFAULT nTotal := 10
do while n <= nTotal
if lAnd( nTotal, n )
AAdd( aResult, n )
endif
n += n
enddo
return aResult
Usage:
Code: Select all | Expand
? ValSplit( 10 ) // -> { 2,8 }
? ValSplit( 12 ) // --> { 4,8 }
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- Carles
- Posts: 1149
- Joined: Fri Feb 10, 2006 2:34 pm
- Location: Barcelona
- Been thanked: 7 times
- Contact:
Re: Función para extraer cadena numérica
Rao,
very elegant, as usual...
C.
very elegant, as usual...
![Very Happy :D](./images/smilies/icon_biggrin.gif)
C.
Salutacions, saludos, regards
"...programar es fácil, hacer programas es difícil..."
UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
"...programar es fácil, hacer programas es difícil..."
UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
- VictorCasajuana
- Posts: 269
- Joined: Wed Mar 28, 2018 4:38 pm
- Location: Vinaròs
- Has thanked: 1 time
- Contact:
Re: Función para extraer cadena numérica
wow!
me siento abrumado por la rápida respuesta de 3 masters!!!!
Perfecto Antonio, entendido alto y claro, esto es lo que necesitaba!!![Very Happy :D](./images/smilies/icon_biggrin.gif)
de lujo, me ha ido bien pegarle un vistazo, además he repasado los artículos, siempre va bien leer un rato.
Mr. Rao, as always giving explicit examples and saving work. Fantastic.
![Shocked :shock:](./images/smilies/icon_eek.gif)
me siento abrumado por la rápida respuesta de 3 masters!!!!
![Laughing :lol:](./images/smilies/icon_lol.gif)
Antonio Linares wrote:Victor,
Puedes usar las propias funciones de Harbour:
? hb_bitAnd( 10, 2 )
? hb_bitAnd( 10, 8 )
Si escribes 10 en binario obtemos esto (puedes usar la calculadora de Windows en modo programador): "1010"
hb_bitAnd( 10, 2 ) intenta hacer un "and" del bit segundo entre "1010" y "10" (dos en binario). Efectivamente ambos tienen el bit "segundo" encendido y devuelve 2 (que es el valor "10")
hb_bitAnd( 10, 8 ) intenta hacer un "and" del bit cuarto entre "1010" y "1000" (ocho en binario). Efectivamente ambos tienen el bit "cuarto" encendido y devuelve 8 (que es el valor "1000")
También tienes la funcion hb_bitOr() que te permite hacer operaciones "or" en vez de operaciones "and".
Por ejemplo ? hb_bitOr( 10, 5 ) devuelve 15 (que es el valor binario "1111") que seria la "unión" de "1010" y "0101" (5)
Perfecto Antonio, entendido alto y claro, esto es lo que necesitaba!!
![Very Happy :D](./images/smilies/icon_biggrin.gif)
Carles wrote:V,
Creo q esta ebtrada del amic Biel te servira...
https://bielsys.blogspot.com/2015/01/ma ... rbour.html
Salut.
C.
de lujo, me ha ido bien pegarle un vistazo, además he repasado los artículos, siempre va bien leer un rato.
![Wink :wink:](./images/smilies/icon_wink.gif)
nageswaragunupudi wrote:Code: Select all | Expand
function ValSplit( nTotal )
local aResult := {}
local n := 1
DEFAULT nTotal := 10
do while n <= nTotal
if lAnd( nTotal, n )
AAdd( aResult, n )
endif
n += n
enddo
return aResult
Usage:Code: Select all | Expand
? ValSplit( 10 ) // -> { 2,8 }
? ValSplit( 12 ) // --> { 4,8 }
Mr. Rao, as always giving explicit examples and saving work. Fantastic.
--------
¿ Y porque no ?
¿ And why not ?
¿ Y porque no ?
¿ And why not ?
- cmsoft
- Posts: 1297
- Joined: Wed Nov 16, 2005 9:14 pm
- Location: Mercedes - Bs As. Argentina
- Been thanked: 2 times
Re: Función para extraer cadena numérica
Un placer leer estas respuestas.... Seguimos aprendiendo...
Re: Función para extraer cadena numérica
Yo con los GURUS ni me meto
apenas si me sale bien la tabla del 10
y con errores![Shocked :shock:](./images/smilies/icon_eek.gif)
apenas si me sale bien la tabla del 10
![Smile :)](./images/smilies/icon_smile.gif)
![Very Happy :D](./images/smilies/icon_biggrin.gif)
y con errores
![Shocked :shock:](./images/smilies/icon_eek.gif)
Cesar Cortes Cruz
SysCtrl Software
Mexico
' Sin +- FWH es mejor "
SysCtrl Software
Mexico
' Sin +- FWH es mejor "