Título: codigo para sacar de un conjunto de texto números
Publicado por: leliCabello en 26 Junio 2010, 01:41 am
hayforma de que en un texto combinado con numeros, saque de ahi solo los numero....ayuden
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: rob1104 en 26 Junio 2010, 04:15 am
Si, si hay forma.
Saludos
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: raul338 en 26 Junio 2010, 05:49 am
Si, si hay forma.
:xD :xD :xD Si! con expresiones regulares!!!! 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 ;)
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Anco en 26 Junio 2010, 05:53 am
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. :)
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Shell Root en 26 Junio 2010, 06:20 am
Es mejor y más fácil con expresiones regulares :P. Pero no tengo VB en mi laptop :S 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
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Karcrack en 26 Junio 2010, 13:40 pm
Me aburria :-[ 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
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Psyke1 en 28 Junio 2010, 10:53 am
Aqui dejo mi alternativa: 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! ;)
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: BlackZeroX en 28 Junio 2010, 11:08 am
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!¡.
' ' //////////////////////////////////////////////////////////////// ' // 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
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!¡.
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Psyke1 en 28 Junio 2010, 22:01 pm
Buena Black! :) Pero tengo una duda: * 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! ;)
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: BlackZeroX en 28 Junio 2010, 23:26 pm
un numero valido no puede ni deve tener dos puntos decimales validos!¡.
Sangriento Infierno Lunar!¡.
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Psyke1 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
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Karcrack en 29 Junio 2010, 12:26 pm
He hecho esta bonita funcion mientras me aburria :P Public Function ExtractNumbers(ByVal sString As String, Optional bReturnAsString As Boolean = False) As Collection Dim cTemp As New Collection Dim sTemp As String Dim sChar As String * 1 Dim i As Long sString = Replace$(sString, ",", ".") For i = 1 To Len(sString) sChar = Mid$(sString, i, 1) Do While (sChar Like "#") Or (sChar = ".") sTemp = sTemp & sChar i = i + 1 sChar = Mid$(sString, i, 1) Loop If Val(sTemp) Then cTemp.Add IIf((bReturnAsString = False), Val(sTemp), sTemp) End If sTemp = vbNullString Next i Set ExtractNumbers = cTemp End Function
Ejemplo: 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
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: raul338 en 29 Junio 2010, 16:37 pm
Public Function GetNumeros(text As String) As Collection ' Incluir en las referencias: Microsoft VBScritp Regular Expressions 5.5 ' Obtener numeros, mediante expresiones regulares. By Raul338 On Error GoTo err Dim cTemp As New Collection Dim objRegExp As RegExp Dim objMatch As Match Dim objMatches Set objRegExp = New RegExp Dim patron As String 'patron = "(\d+)" ' Numeros enteros 'patron = "(\d+(?:[\.,]\d+)?)" ' Numeros con/sin decimales patron = "(\d{1,3}(\.\d{3})+(?:,\d+)?|\d+(?:,\d+)?)" ' Numeros con separador de miles (.) con/sin decimales (,) 'patron = "(\d{1,3}(\,\d{3})+(?:\.\d+)?|\d+(?:\.\d+)?)" ' Numeros con separador de miles (,) con/sin decimales (.) 'patron = "(\d+[,.]\d+)" ' Numeros con decimales objRegExp.Pattern = patron objRegExp.Global = True Set objMatches = objRegExp.Execute(text) For Each objMatch In objMatches cTemp.Add objMatch.Value Next Set GetNumeros = cTemp Exit Function err: ' Aca tira error en caso de que metan mal la mano en las expresiones regulares xD End Function
Private Sub Form_Load() Dim item As Variant Dim s As String s = "Estoy provando la extracción de números como 1992, también la extracción de números decimales: 3,1415" s = s & "Tambien puedo decir que tengo 1000000,24 dolares o 1.123.456,78 euros (?)" For Each item In GetNumeros(s) Debug.Print item Next End Sub
Aver quien supera eso (?) :xD
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: BlackZeroX en 29 Junio 2010, 16:55 pm
... la cosa era usar un algoritmo ¬¬" no Expresiones R. tramposo ¬¬". jajaja. bueno para evitar la referencia usar Dim cTemp As New Collection Dim objRegExp As Object 'RegExp Dim objMatch As Object 'Match Dim objMatches As Object Dim patron As String Set objRegExp = CreateObject("VBScript.RegExp") 'New RegExp
Dulce Infierno Lunar!¡.
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Psyke1 en 29 Junio 2010, 21:24 pm
@Karcrack Me aburria :-[ 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: Option Explicit Public Function Get_Only_Numbers(ByVal sText As String) As String() Const sDecimals As String = ",.'" Dim sNumbersArray() As String Dim sActualChar As String * 1 Dim sNextChar As String * 1 Dim sPreviousChar As String * 1 Dim bAcceptString As Boolean Dim lTotalChar As Long Dim x As Long Dim y As Long lTotalChar = Len(sText) If lTotalChar > 0 Then ReDim sNumbersArray(0) For x = 1 To lTotalChar If x > 1 Then sPreviousChar = Mid$(sText, x - 1, 1) sActualChar = Mid$(sText, x, 1): sNextChar = Mid$(sText, x + 1, 1) If ((sActualChar = Chr$(45) Or InStr(sDecimals, sActualChar) > 0 And IsNumeric(sPreviousChar)) _ And IsNumeric(sNextChar)) Or (IsNumeric(sActualChar)) Then bAcceptString = True Else If bAcceptString = True Then y = y + 1: ReDim Preserve sNumbersArray(y): bAcceptString = False End If If bAcceptString = True Then sNumbersArray(y) = sNumbersArray(y) & sActualChar Next x Get_Only_Numbers = sNumbersArray() Erase sNumbersArray End If End Function Private Sub Form_Load() Dim vItem As Variant Dim sStringToAnalyze As String 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" sStringToAnalyze = sStringToAnalyze & "También puedo decir que tengo 1000000,24 dólares o 1.123.456,78 euros (?)" 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 ... =)" For Each vItem In Get_Only_Numbers(sStringToAnalyze): Debug.Print vItem: Next End Sub
Obtengo esto: 3,1415 3.1415 1000000,24 1.123.456,78 -2344 5'567 456 89 Salu2! ;)
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: raul338 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
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Psyke1 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! ;)
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Karcrack en 1 Julio 2010, 12:15 pm
Buen codigo Psyke, pero seria mas sencillo si trabajaras con Collections ;)
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Psyke1 en 1 Julio 2010, 13:18 pm
Gracias Karcrack! ;D Lo tendre en cuenta para futuras ocasiones! ;)
Salu2!
Título: Re: codigo para sacar de un conjunto de texto números
Publicado por: Psyke1 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: ((\-)?\d+(([\.,']\d+)+)?) Claro que no incluye validacion como la que hizo Raul... :-\ Predon por revivir post... :-* ;) DoEvents¡! :P
|