Extrair apenas números de uma string

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

Extrair apenas números de uma string

Mensagem 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 
Oscar Ribeiro
xHarbour+Fwh+WorkShop
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Extrair apenas números de uma string

Mensagem 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
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
oribeiro
Usuário Nível 1
Usuário Nível 1
Mensagens: 30
Registrado em: 15 Fev 2013 07:35
Localização: Itu/SP
Contato:

Extrair apenas números de uma string (resolvido)

Mensagem por oribeiro »

Muito bom!
Obrigado.
Oscar Ribeiro
xHarbour+Fwh+WorkShop
sambomb
Usuário Nível 3
Usuário Nível 3
Mensagens: 250
Registrado em: 24 Out 2008 17:02
Localização: Itaocara - RJ - Brasil

Extrair apenas números de uma string

Mensagem 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
Imagem

Rca Sistemas - Itaocara - RJ
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Extrair apenas números de uma string

Mensagem 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

*********************************************************************************************
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Extrair apenas números de uma string

Mensagem 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
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Extrair apenas números de uma string

Mensagem 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)

//------------------------------------------------------------------------------------------------------------------ 
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Extrair apenas números de uma string

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

Extrair apenas números de uma string

Mensagem 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, "." )
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Extrair apenas números de uma string

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Extrair apenas números de uma string

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Extrair apenas números de uma string

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Extrair apenas números de uma string

Mensagem 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 !
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Responder