elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  codigo para sacar de un conjunto de texto números
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: codigo para sacar de un conjunto de texto números  (Leído 8,509 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: codigo para sacar de un conjunto de texto números
« Respuesta #10 en: 29 Junio 2010, 11:25 am »

Si si, eso quedo claro, pero...
Entonces que quieres hacer si tienes la cadena: "6546.65163.565"? :huh:
No lo guardarias en el array??

Salu2! :P


« Última modificación: 29 Junio 2010, 11:48 am por *PsYkE1* » En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: codigo para sacar de un conjunto de texto números
« Respuesta #11 en: 29 Junio 2010, 12:26 pm »

He hecho esta bonita funcion mientras me aburria :P

Código
  1. Public Function ExtractNumbers(ByVal sString As String, Optional bReturnAsString As Boolean = False) As Collection
  2.    Dim cTemp   As New Collection
  3.    Dim sTemp   As String
  4.    Dim sChar   As String * 1
  5.    Dim i       As Long
  6.  
  7.    sString = Replace$(sString, ",", ".")
  8.  
  9.    For i = 1 To Len(sString)
  10.        sChar = Mid$(sString, i, 1)
  11.        Do While (sChar Like "#") Or (sChar = ".")
  12.            sTemp = sTemp & sChar
  13.            i = i + 1
  14.            sChar = Mid$(sString, i, 1)
  15.        Loop
  16.        If Val(sTemp) Then
  17.            cTemp.Add IIf((bReturnAsString = False), Val(sTemp), sTemp)
  18.        End If
  19.        sTemp = vbNullString
  20.    Next i
  21.  
  22.    Set ExtractNumbers = cTemp
  23. End Function

Ejemplo:
Código:
Private Sub Form_Load()
    Dim vItem   As Variant
    
    For Each vItem In ExtractNumbers("Estoy provando la extracción de números como 1992, también la extracción de números decimales: 3,1415 o 3.1415")
        Debug.Print vItem
    Next vItem
End Sub


En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: codigo para sacar de un conjunto de texto números
« Respuesta #12 en: 29 Junio 2010, 16:37 pm »

Código
  1.  
  2. Public Function GetNumeros(text As String) As Collection
  3.    ' Incluir en las referencias: Microsoft VBScritp Regular Expressions 5.5
  4.    ' Obtener numeros, mediante expresiones regulares. By Raul338
  5.    On Error GoTo err
  6.    Dim cTemp As New Collection
  7.    Dim objRegExp As RegExp
  8.    Dim objMatch As Match
  9.    Dim objMatches
  10.  
  11.    Set objRegExp = New RegExp
  12.    Dim patron As String
  13.  
  14.    'patron = "(\d+)"                            ' Numeros enteros
  15.    'patron = "(\d+(?:[\.,]\d+)?)"                ' Numeros con/sin decimales
  16.    patron = "(\d{1,3}(\.\d{3})+(?:,\d+)?|\d+(?:,\d+)?)"   ' Numeros con separador de miles (.) con/sin decimales (,)
  17.    'patron = "(\d{1,3}(\,\d{3})+(?:\.\d+)?|\d+(?:\.\d+)?)"   ' Numeros con separador de miles (,) con/sin decimales (.)
  18.    'patron = "(\d+[,.]\d+)"                        ' Numeros con decimales
  19.  
  20.    objRegExp.Pattern = patron
  21.    objRegExp.Global = True
  22.  
  23.    Set objMatches = objRegExp.Execute(text)
  24.  
  25.    For Each objMatch In objMatches
  26.        cTemp.Add objMatch.Value
  27.     Next
  28.    Set GetNumeros = cTemp
  29.    Exit Function
  30. err:
  31.    ' Aca tira error en caso de que metan mal la mano en las expresiones regulares xD
  32. End Function
  33.  

Código
  1. Private Sub Form_Load()
  2.    Dim item As Variant
  3.    Dim s As String
  4.    s = "Estoy provando la extracción de números como 1992, también la extracción de números decimales: 3,1415"
  5.    s = s & "Tambien puedo decir que tengo 1000000,24 dolares o 1.123.456,78 euros (?)"
  6.    For Each item In GetNumeros(s)
  7.        Debug.Print item
  8.    Next
  9. End Sub
  10.  

Aver quien supera eso (?) :xD
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: codigo para sacar de un conjunto de texto números
« Respuesta #13 en: 29 Junio 2010, 16:55 pm »


... la cosa era usar un algoritmo ¬¬" no Expresiones R. tramposo ¬¬". jajaja.

bueno para evitar la referencia usar

Código
  1.  
  2.    Dim cTemp       As New Collection
  3.    Dim objRegExp   As Object 'RegExp
  4.    Dim objMatch    As Object 'Match
  5.    Dim objMatches  As Object
  6.    Dim patron      As String
  7.  
  8.    Set objRegExp = CreateObject("VBScript.RegExp") 'New RegExp
  9.  
  10.  

Dulce Infierno Lunar!¡.
En línea

The Dark Shadow is my passion.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: codigo para sacar de un conjunto de texto números
« Respuesta #14 en: 29 Junio 2010, 21:24 pm »

@Karcrack
Citar
Me aburria :-[
Citar
He hecho esta bonita funcion mientras me aburria :P
AJAJAJA :xD
Te aburres mucho tu, ¿¿eh??  :P
... la cosa era usar un algoritmo ¬¬" no Expresiones R. tramposo ¬¬". jajaja.
JAJAJJAJA :laugh:
Raul y sus Expr.Reg... :silbar:

Bueno aqui os dejo la funcion que prometi, que ademas capta los numeros negativos :P:
Código
  1. Option Explicit
  2.  
  3. Public Function Get_Only_Numbers(ByVal sText As String) As String()
  4.    Const sDecimals             As String = ",.'"
  5.    Dim sNumbersArray()         As String
  6.    Dim sActualChar             As String * 1
  7.    Dim sNextChar               As String * 1
  8.    Dim sPreviousChar           As String * 1
  9.    Dim bAcceptString           As Boolean
  10.    Dim lTotalChar              As Long
  11.    Dim x                       As Long
  12.    Dim y                       As Long
  13.  
  14.    lTotalChar = Len(sText)
  15.    If lTotalChar > 0 Then
  16.        ReDim sNumbersArray(0)
  17.        For x = 1 To lTotalChar
  18.            If x > 1 Then sPreviousChar = Mid$(sText, x - 1, 1)
  19.            sActualChar = Mid$(sText, x, 1): sNextChar = Mid$(sText, x + 1, 1)
  20.            If ((sActualChar = Chr$(45) Or InStr(sDecimals, sActualChar) > 0 And IsNumeric(sPreviousChar)) _
  21.            And IsNumeric(sNextChar)) Or (IsNumeric(sActualChar)) Then
  22.                bAcceptString = True
  23.            Else
  24.                If bAcceptString = True Then y = y + 1: ReDim Preserve sNumbersArray(y): bAcceptString = False
  25.            End If
  26.            If bAcceptString = True Then sNumbersArray(y) = sNumbersArray(y) & sActualChar
  27.        Next x
  28.        Get_Only_Numbers = sNumbersArray()
  29.        Erase sNumbersArray
  30.    End If
  31. End Function
  32.  
  33. Private Sub Form_Load()
  34.    Dim vItem                 As Variant
  35.    Dim sStringToAnalyze      As String
  36.  
  37.    sStringToAnalyze = "Estoy provando la extracción de números como 1992, también la extracción de números decimales: 3,1415 o 3.1415"
  38.    sStringToAnalyze = sStringToAnalyze & "También puedo decir que tengo 1000000,24 dólares o 1.123.456,78 euros (?)"
  39.    sStringToAnalyze = sStringToAnalyze & "Pero mi función también reconoce numeros como el -2344 y 5'567 y no los confunde con m.456 ni con -a89 ... =)"
  40.    For Each vItem In Get_Only_Numbers(sStringToAnalyze): Debug.Print vItem: Next
  41. End Sub

Obtengo esto:
Citar
3,1415
3.1415
1000000,24
1.123.456,78
-2344
5'567
456
89

Salu2! ;)
« Última modificación: 6 Julio 2010, 20:25 pm por *PsYkE1* » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: codigo para sacar de un conjunto de texto números
« Respuesta #15 en: 30 Junio 2010, 00:36 am »


... la cosa era usar un algoritmo ¬¬" no Expresiones R. tramposo ¬¬". jajaja.

Yo dije primero que se puede con expreg. Ustedes fueron los tipos con tiempo libre para dedicarle al tema, yo la hice facil y corta xD

He hecho esta bonita funcion mientras me aburria :P

No funciona con los ultimos 2 numeros q puse :P
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: codigo para sacar de un conjunto de texto números
« Respuesta #16 en: 30 Junio 2010, 14:57 pm »


... la cosa era usar un algoritmo ¬¬" no Expresiones R. tramposo ¬¬". jajaja.

Yo dije primero que se puede con expreg. Ustedes fueron los tipos con tiempo libre para dedicarle al tema, yo la hice facil y corta xD

He hecho esta bonita funcion mientras me aburria :P

No funciona con los ultimos 2 numeros q puse :P

JOJOJOJO :laugh:
No, si al final acabamos a tortas!! :laugh:

Salu2! ;)
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: codigo para sacar de un conjunto de texto números
« Respuesta #17 en: 1 Julio 2010, 12:15 pm »

Buen codigo Psyke, pero seria mas sencillo si trabajaras con Collections ;)
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: codigo para sacar de un conjunto de texto números
« Respuesta #18 en: 1 Julio 2010, 13:18 pm »

Gracias Karcrack! ;D
Lo tendre en cuenta para futuras ocasiones! ;)

Salu2!
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: codigo para sacar de un conjunto de texto números
« Respuesta #19 en: 27 Julio 2010, 00:24 am »

Buff, espero que no me llameis pesado  :laugh:, pero esta es mi RegExp para hacer EXACTAMENTE lo que hace la funcion que postee:
Citar
((\-)?\d+(([\.,']\d+)+)?)
Claro que no incluye validacion como la que hizo Raul...  :-\
Predon por revivir post... :-* ;)

DoEvents¡! :P
« Última modificación: 27 Julio 2010, 18:34 pm por *PsYkE1* » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines