Página 1 de 1

Extrair apenas números de uma string

Enviado: 22 Mai 2013 07:40
por oribeiro
Pessoal,
Eu criei uma função para extrair números de uma variável caractere.
Existe alguma função nativa no xHarbour para fazer isso?
Aguardo,

Código: Selecionar todos

*********************************************************************************************
FUNCTION StrNum( cVar , lPontos) // Esta funcao retorna apenas os numeros da String
*********************************************************************************************
   Local cVar1 := ""
   DEFAULT lPontos := .T.
   cVar = Alltrim( Upper( cVar ) )
   For nInd=1 To Len(cVar)
      if Subst(cVar, nInd, 1)$("0123456789"+iif(lPontos,",.",""))
         cVar1 = cVar1 + Subst(cVar, nInd, 1)
      endif
   Next
RETURN cVar1 

Extrair apenas números de uma string

Enviado: 23 Mai 2013 07:13
por Jairo Maia
Olá oribeiro,

Função nativa não conheço, mas tem a CharOnly() da HBCT.LIB, talvez ajude:

Código: Selecionar todos

Function Main()
 Local cStringFix := "0123456789"
 Local cStringGeral := "STRING de Teste abcdefhg 12345"

 cStringNumerica := CharOnly( cStringFix, cStringGeral )

 ? cStringNumerica  // Retornará 12345

Return

Extrair apenas números de uma string (resolvido)

Enviado: 23 Mai 2013 08:28
por oribeiro
Muito bom!
Obrigado.

Extrair apenas números de uma string

Enviado: 23 Mai 2013 15:08
por sambomb
Se não me engano da pra fazer isso tb:
For i := 1 to Len(cString)
cResult := If(cString $ ("1234567890"+If(lDecimal,".",""),cString,"")
End

Extrair apenas números de uma string

Enviado: 23 Mai 2013 15:42
por alxsts
Olá!

Apenas como complemento, segue a minha visão deste código, usando algumas características novas da linguagem [x]Harbour, como declaração dostipos de variáveis e For ... Each:

Código: Selecionar todos

*********************************************************************************************
FUNCTION StrNum( cVar , lPontos) // Esta funcao retorna apenas os numeros da String
*********************************************************************************************

   Local cVar1   As Char := ""
   Local cChar   As Char
   Local cTarget As Char

   lPontos := IF( lPontos == NIL, .T., .F. )

   cVar := Upper( Alltrim( cVar ) )

   cTarget := "0123456789" + If( lPontos, ",.", "" )

   FOR EACH cChar in cVar

      IF At( cChar, cTarget ) > 0
         cVar1 += cChar
      ENDIF

   NEXT

RETURN cVar1

*********************************************************************************************

Extrair apenas números de uma string

Enviado: 18 Set 2022 09:24
por deividdjs
bom dia Prezados ... reabrindo o post depois de decadas hehehe

e como eu faço para extrair os zeros a esquerda de uma variavel caracter ??

Abs

Extrair apenas números de uma string

Enviado: 18 Set 2022 10:34
por deividdjs
Fiz uma funçãozinha aqui q fungou .. obrigado parças ...

Código: Selecionar todos

//------------------------------------------------------------------------------------------------------------------
//---------------------------//
  Function TIRA_ZEROS(string)
//---------------------------//
  local nValor,cValor
  
  nValor := val(string)
  cValor := str(nValor,7)
  
  return(cValor)

//------------------------------------------------------------------------------------------------------------------ 

Extrair apenas números de uma string

Enviado: 18 Set 2022 11:53
por Itamar M. Lins Jr.
Olá!

Código: Selecionar todos

//---------------------------//
Function TIRA_ZEROS(string)
//---------------------------//
Return hb_ntoc(val(string))
Syntax
hb_ntoc( <nValue>, [<nDecs>] ) → cValue

Código: Selecionar todos

LOCAL n := ( 5 / 2 ) + 0.009

? hb_ntoc( n )     // --> 2.509
? Str( n )         // -->          2.51
? hb_ntoc( n, 2 )  // --> 2.51
? Str( n, 5, 2 )   // -->  2.51
? hb_ntos( n )     // --> 2.51
? "--- decimals set to 7 ----"
SET DECIMALS TO 7
? Str( n )         // -->          2.51
? hb_ntoc( n )     // --> 2.509
? Str( n, 10, 7 )  // -->  2.5090000
? hb_ntoc( n, 7 )  // --> 2.509
? "--- pass non numeric / NIL value ----"
? Str( "42" )      // --> RTE
Saudações,
Itamar M. Lins Jr.

Extrair apenas números de uma string

Enviado: 18 Set 2022 11:57
por Linguagemclipper
oribeiro escreveu:Pessoal,
Eu criei uma função para extrair números de uma variável caractere.
Existe alguma função nativa no xHarbour para fazer isso?
Aguardo,

Código: Selecionar todos

*********************************************************************************************
FUNCTION StrNum( cVar , lPontos) // Esta funcao retorna apenas os numeros da String
*********************************************************************************************
   Local cVar1 := ""
   DEFAULT lPontos := .T.
   cVar = Alltrim( Upper( cVar ) )
   For nInd=1 To Len(cVar)
      if Subst(cVar, nInd, 1)$("0123456789"+iif(lPontos,",.",""))
         cVar1 = cVar1 + Subst(cVar, nInd, 1)
      endif
   Next
RETURN cVar1 
Se era para tirar a vírgula e o ponto bastava fazer isso sem estressar o processador:

Código: Selecionar todos

cVAR := StrTran( cVAR, "," )
cVAR := StrTran( cVAR, "." )

Extrair apenas números de uma string

Enviado: 18 Set 2022 15:00
por JoséQuintas
Linguagemclipper escreveu:Se era para tirar a vírgula e o ponto bastava fazer isso sem estressar o processador:
O que dá pra melhorar na função é trocar por FOR EACH
Aqui não trato decimal, porque meu uso é outro

Código: Selecionar todos

FUNCTION SoNumeros( cTxt )

   LOCAL cSoNumeros := "", cChar

   FOR EACH cChar IN cTxt
      IF cChar $ "0123456789"
         cSoNumeros += cChar
      ENDIF
   NEXT

   RETURN cSoNumeros
Dá pra usar em SoNumeros( CPF ), SoNumeros( CNPJ ), SoNumeros( Telefone ), SoNumeros( InscricaoEstadual ), etc.
Já nestes casos não pode tratar decimal.
Imagino que ele tratou pra pegar valor no meio de qualquer texto, como eu fiz.

Extrair apenas números de uma string

Enviado: 18 Set 2022 16:03
por alxsts
Olá!
JoséQuintas escreveu:O que dá pra melhorar na função é trocar por FOR EACH
Foi o que usei acima, em 23 Mai 2013 15:42.

Extrair apenas números de uma string

Enviado: 18 Set 2022 18:08
por JoséQuintas
Passei por ela direto, não vi.
Outra opção é usar aquelas funções de RegEx, mas deixei pra entender isso algum dia que precisar.

Sobre função existente no Harbour.....

Duas opções:

Tentar ver se o hbmk2 encontra, usando, por exemplo, hbmk2 -find num

Imagino que, se existir, vai ser na hbct, então na pasta contrib\hbct dar uma olhada no hbct.hbx que contém a lista de funções.

Extrair apenas números de uma string

Enviado: 20 Set 2022 09:51
por deividdjs
essa função do ITAMAR ficou top.. porque eu precisava somente tirar os ZEROS a ESQUERDA ..

Return hb_ntoc(val(string))

SHOW ...

obrigado amigos !