|
|
|
|
|
Dicas
|
|
Visual Basic (Validações)
|
|
|
Título da Dica: Extrair somente os números
|
|
|
|
Postada em 7/3/2004 por Bussacarini
Private Sub Command1_Click() ' Esta é a minha rotina para extrair os número. 'Com ela, se obtém os seguintes resultados: ' 'Usuário digitou ::::: A função processou ' R$45 ..................... 45 ' 3>43 ..................... 343 ' 2.345,67 ................. 2345.67 ' 5.6.235.1 ................ 56235.1 ' 5,632.11 ................. 5632.11 ' e2#67.0.U8 ............... 2670.8 ' US$ 78.3334 .............. 78.3334 ' 'Vantagens 'O usuário pode digitar qualquer caractere por engano enquanto entra 'com um valor e o programa não está nem aí... 'Ele sempre pega a última vírgula ou ponto e entende que este seja o marco que separa 'o número inteiro do decimal. 'Ainda há a possibilidade de se 'dizer' à função que ignore os pontos ou vírgulas e 'retorne um número puramente inteiro. 'Esta é uma maneira mais fácil do que ficar filtrando tecla por tecla e ver qual é número, 'ficar controlando quantidade de vírgulas, etc., uma vez que o usuário poderia 'simplesmente clicar o botão direito do mouse e colar uma string: "HeHeHe!" 'A função retorna uma string. Isto é prático porque dessa maneira pode-se atribuir o valor 'à uma variável somente por usar a função val(). Isso evita erros no que tange a escopos. (Ex.: 'você declara uma variável do tipo byte e a função é do escopo integer. ;-) ) Assim, apenas 'faça o seguinte para usar a função para usar o valor retornado como número: iMinhaVar = Val(OnlyNumber(True, "R$ 256,95")) * 10 End Sub
'Se colocada num módulo, poderá ser usada por todos os diferentes formulários Public Function OnlyNumber(bDecimal As Boolean, sOnlyNumber As String) As String Dim bComma As Boolean Dim sX As String Dim yX As Byte, yY As Byte If Len(sOnlyNumber) = 0 Then Exit Function yX = Len(sOnlyNumber) For yY = 1 To Len(sOnlyNumber) If Mid(sOnlyNumber, yX, 1) Like "[0-9]" Then sX = Mid(sOnlyNumber, yX, 1) & sX ElseIf (Mid(sOnlyNumber, yX, 1) = Chr(44) Or Mid(sOnlyNumber, yX, 1) = Chr(46)) And Not bComma And bDecimal Then sX = Chr(46) & sX bComma = True End If yX = yX - 1 Next yY OnlyNumber = sX End Function
por Glauco Marcelo Bussacarini bussacarini@ig.com.br
|
|
|
|
|