codigo para sacar de un conjunto de texto números

Iniciado por leliCabello, 26 Junio 2010, 01:41 AM

0 Miembros y 1 Visitante están viendo este tema.

leliCabello

hayforma de que en un texto combinado con numeros, saque de ahi solo los numero....ayuden

rob1104

Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.

raul338

Cita de: rob1104 en 26 Junio 2010, 04:15 AM
Si, si hay forma.

:xD :xD :xD

Si! con expresiones regulares!!!!

(\d+)

Esa es la expresion regular para obtener todos los numeros de un texto
Ahora investiga como usar las expresiones regulares y como obtener los grupos generados por las ER (expresiones regulares) desde vb ;)

Anco

No manejo vb, aunque te dare otra idea mas no el codigo, primero calculas cuantos caracteres tiene la cadena, haces un ciclo con el dato anterior parar recorrer la cadena, comparas cada caracter, y aquellos que sean numeros los guardas en una variable. Seguro el vb debe tener alguna funcion para hacerte la vida aun mas facil, asi que BUSCA.  :)
???

Shell Root

Es mejor y más fácil con expresiones regulares :P. Pero no tengo VB en mi laptop :S

Código (vb) [Seleccionar]
Function dejarNumeros(cadenaTexto As String) As String
  Const listaNumeros = "0123456789"
  Dim cadenaTemporal As String
  Dim i As Integer

  cadenaTexto = Trim$(cadenaTexto)
  If Len(cadenaTexto) = 0 Then
    Exit Function
  End If

  cadenaTemporal = ""

  For i = 1 To Len(cadenaTexto)
    If InStr(listaNumeros, Mid$(cadenaTexto, i, 1)) Then
      cadenaTemporal = cadenaTemporal + Mid$(cadenaTexto, i, 1)
    End If
  Next
  return cadenaTemporal
End Function

Fuente: :http://ftp.ajpdsoft.com/modules.php?name=Content&pa=showpage&pid=228
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Karcrack

Me aburria :-[
Código (vb) [Seleccionar]
Private Sub Form_Load()
    Debug.Print SoloNumeros("P1rueba922")
End Sub

Public Function SoloNumeros(ByVal sCadena As String) As String
    Dim vItem       As Variant
    Dim bvBytes()   As Byte
   
    bvBytes = StrConv(sCadena, vbFromUnicode)
   
    For Each vItem In bvBytes
        If (48 <= vItem) And (vItem <= 57) Then
            SoloNumeros = SoloNumeros & Chr$(vItem)
        End If
    Next vItem
End Function

Psyke1

#6
Aqui dejo mi alternativa:
Código (vb) [Seleccionar]

Option Explicit

Private Sub Form_Load()
    Debug.Print Only_Numbers("hola1 ¿que34 tal538?")
End Sub

Public Function Only_Numbers(ByVal sText As String) As String
   Dim sActualChar     As String * 1
   Dim lTotalChar      As Long
   Dim x               As Long
   lTotalChar = Len(sText)
   If lTotalChar > 0 Then
       For x = 1 To lTotalChar
           sActualChar = Mid$(sText, x, 1)
           If IsNumeric(sActualChar) Then Only_Numbers = Only_Numbers & sActualChar
       Next
   End If
End Function


Salu2! ;)

BlackZeroX

#7
Ando desvelándome y esto ya lo había hecho pero... no me dio la gana resolverle la vida en el momento asi qué con un lindo retardo pongo esto:

Es mas lento qué los anteriores aquí expuestos pero esta pensado para:


* Obtener números Negativos (Con signo).
* Obtener números con Decimales!¡ (Optativo Coma decimal o punto Decimal según se especifique!¡.).


* No esta Optimizado el codigo!¡.
* No esta terminado aun!¡.
* Bug de que si se espesifica un signo valido (Ejemplo coma decimal) tomara en sucesion esta sentencia "6546.65163.565" o equivalente a la misma!¡.


Código (vb) [Seleccionar]

'
' ////////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel )            //
' //                                                            //
' // Web: http://InfrAngeluX.Sytes.Net/                         //
' //                                                            //
' // |-> Pueden Distribuir Este Código siempre y cuando         //
' // no se eliminen los créditos originales de este código      //
' // No importando que sea modificado/editado o engrandecido    //
' // o achicado, si es en base a este código                    //
' ////////////////////////////////////////////////////////////////
'
Option Explicit

Public Function GetArrayNumbersFromString(ByVal StrInput$, Optional ByVal SepDecimal$ = ".") As String()
Dim StrArray_TMPArrayNumers$()
Dim Lng_Pos&
Dim Lng_LenMid&
Dim Lng_PosIInArray&
Dim Lng_LenStr&
Dim Str_Tmp$
Dim Str_Char$
   Lng_LenStr& = Strings.Len(StrInput$)
   If Lng_LenStr& > 1 Then
       If Not Information.IsNumeric(StrInput$) Then
           Str_Char$ = Strings.Space$(1)
           For Lng_Pos& = 1 To Lng_LenStr&
               Str_Char$ = Strings.Mid$(StrInput$, Lng_Pos&, 1)
               If IsNumeric(Str_Char$) Or (Lng_LenMid& And Str_Char$ = SepDecimal$) Or (Lng_LenMid& = 0 And Str_Char$ = "-") Then
                   Lng_LenMid& = Lng_LenMid& + 1
               ElseIf Lng_LenMid& > 0 And Lng_Pos& <= Lng_LenStr& - 1 Then
                   If Lng_LenMid& = 1 And Strings.Mid$(StrInput$, Lng_Pos& - Lng_LenMid&, Lng_LenMid&) = "-" Then
                       Lng_LenMid& = 0
                   Else
                       ReDim Preserve StrArray_TMPArrayNumers$(Lng_PosIInArray&)
                       StrArray_TMPArrayNumers$(Lng_PosIInArray&) = Strings.Mid$(StrInput$, Lng_Pos& - Lng_LenMid&, Lng_LenMid&)
                       Lng_PosIInArray& = Lng_PosIInArray& + 1
                       Lng_LenMid& = 0
                   End If
               End If
           Next
           If Lng_LenMid& > 0 Then
                   ReDim Preserve StrArray_TMPArrayNumers$(Lng_PosIInArray&)
                   StrArray_TMPArrayNumers$(Lng_PosIInArray&) = Strings.Mid$(StrInput$, Lng_Pos& - Lng_LenMid&, Lng_LenStr&)
           End If
       Else
           ReDim StrArray_TMPArrayNumers$(Lng_PosIInArray&)
           StrArray_TMPArrayNumers$(Lng_PosIInArray&) = StrInput$
       End If
   End If
   GetArrayNumbersFromString = StrArray_TMPArrayNumers$()
End Function



Código (vb) [Seleccionar]


   Const Str_Cadena$ = "123.4567.89.miguel angel000ort.....ega avila-a159.753jjj"
   MsgBox Strings.Join(GetArrayNumbersFromString(Str_Cadena$, ""), "-") & Constants.vbNewLine & _
          Strings.Join(GetArrayNumbersFromString(Str_Cadena$, "."), "-")



Sangriento Infierno Lunar!¡.
The Dark Shadow is my passion.

Psyke1

Buena Black!  :)
Pero tengo una duda:
Citar
* Bug de que si se espesifica un signo valido (Ejemplo coma decimal) tomara en sucesion esta sentencia "6546.65163.565" o equivalente a la misma!¡.
No entiendo, si detecta "6546.65163.565" que quieres hacer exactamente???  :huh:
Entonces si en la cadena hay una direeccion Ip, estaria bien cojerla, ¿no?  :silbar:

PD: En 2 dias subo una alternativa al code de BlackZer0X! :P

Salu2!  ;)

BlackZeroX


un numero valido no puede ni deve tener dos puntos decimales validos!¡.

Sangriento Infierno Lunar!¡.
The Dark Shadow is my passion.