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 !