Números | Cortesía de Pixabay
Que tal, saludos a todos:
En esta ocasión quiero compartir con ustedes el código fuente de una rutina que implementé para extraer todos los números presentes en una cadena de texto usando Visual Basic.Net. El objetivo de esta rutina es extraer "todos" los números presentes en el texto, independientemente de su posición dentro del mismo, espero les sea de utilidad. Expongo a continuación el código fuente y luego una explicación general.
'#### Purpose: Extract number section from string
'#### Created date: 28/04/2015
'#### Created by username: Juan Manuel Mar Hdz.
'#### Last modified date: 11/03/2016
'#### Last modified username: Juan Manuel Mar Hdz.
Public Function getNumbersFromText(txt As String, Optional preserveseparators As Boolean = False) As String
Dim c As String, i As Long, found As Boolean, mystr As String = ""
If txt.IsNullOrEmpty(txt) = True Then
Return ""
Else
For i=0 To txt.Trim().Length - 1
Try
c = txt.Substring(i, 1)
Catch exp As Exception
c = ""
End Try
If c.IsNullOrEmpty(c) = False Then
If preserveseparators = False Then
If IsNumeric(c) = True Then
mystr = mystr.Trim + c.Trim
found = True
End If
Else
If IsNumeric(c) = True Or c.ToString().Trim = "." Or c.ToString().Trim = "," Then
mystr = mystr.Trim + c.Trim
found = True
End If
End If
End If
Next
If found = False Then
Return ""
Else
Return mystr.Trim
End If
End If
End Function
Lo que haremos para ir extrayendo los números es mediante el ciclo "For" al inicio de la rutina, iremos recorriendo nuestra cadena posición por posición y el valor recuperado almacenándolo en la variable "c". Una vez validemos que ese carácter sea correcto nos asesoraremos con la variable "preserveseparators" para conservar o no los caracteres separadores dentro de un formato numérico, como lo son comas y puntos.
Si esto es afirmativo entonces la cadena resultante "mystr" irá almacenando todos los números encontrados y adicional los caracteres separadores, de lo contrario solo almacenaremos los números.
If preserveseparators = False Then
'En esta sección si el caracter extraido es número se almacena en mystr, pero solo números.
If IsNumeric(c) = True Then
mystr = mystr.Trim + c.Trim
found = True
End If
Else
'En esta sección si el caracter extraido es número se almacena en mystr, se aceptan números, pero también caracteres separadores.
If IsNumeric(c) = True Or c.ToString().Trim = "." Or c.ToString().Trim = "," Then
mystr = mystr.Trim + c.Trim
found = True
End If
End If
Como pueden la rutina es realmente muy sencilla, una vez hallamos recorrido toda la cadena de texto retornaremos la variable "mystr" y de esa manera habremos extraído todos los números presentes en nuestra cadena de texto.
Vamos a ver el código fuente en acción:
Llamando a la rutina (este código fuente ya lo tengo dentro de una clase, así que debo llamar a la función haciendo referencia a la clase).
La salida:
Los invito a seguir visitando este blog y gracias por sus visitas realizadas.