FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Funci贸n para extraer cadena num茅rica
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Funci贸n para extraer cadena num茅rica
Posted: Tue Aug 30, 2022 11:08 AM

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!

--------

驴 Y porque no ?

驴 And why not ?
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Funci贸n para extraer cadena num茅rica
Posted: Tue Aug 30, 2022 11:58 AM

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)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Funci贸n para extraer cadena num茅rica
Posted: Tue Aug 30, 2022 12:02 PM
Si prefieres usar las funciones de FWH lo har铆as asi:
Code (fw): Select all Collapse
#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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Funci贸n para extraer cadena num茅rica
Posted: Tue Aug 30, 2022 12:41 PM

V,

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
HIX -> https://github.com/carles9000/hix
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Funci贸n para extraer cadena num茅rica
Posted: Tue Aug 30, 2022 01:20 PM
Code (fw): Select all Collapse
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 (fw): Select all Collapse
? ValSplit( 10 ) // -> { 2,8 }
? ValSplit( 12 ) // --> { 4,8 }
Regards



G. N. Rao.

Hyderabad, India
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Funci贸n para extraer cadena num茅rica
Posted: Tue Aug 30, 2022 02:07 PM

Rao,

very elegant, as usual... :D

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
HIX -> https://github.com/carles9000/hix
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: Funci贸n para extraer cadena num茅rica
Posted: Tue Aug 30, 2022 04:20 PM
wow! :-)
me siento abrumado por la r谩pida respuesta de 3 masters!!!! :-)

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!! :-)

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. :-)

nageswaragunupudi wrote:
Code (fw): Select all Collapse
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 (fw): Select all Collapse
? 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 ?
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Funci贸n para extraer cadena num茅rica
Posted: Tue Aug 30, 2022 04:27 PM

Un placer leer estas respuestas.... Seguimos aprendiendo...

Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Funci贸n para extraer cadena num茅rica
Posted: Tue Sep 06, 2022 06:37 PM

Yo con los GURUS ni me meto
apenas si me sale bien la tabla del 10 :) :D
y con errores :shock:

Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "

Continue the discussion