Autor
|
Tema: codigo para sacar de un conjunto de texto números (Leído 8,509 veces)
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Si si, eso quedo claro, pero... Entonces que quieres hacer si tienes la cadena: "6546.65163.565"? No lo guardarias en el array?? Salu2!
|
|
« Última modificación: 29 Junio 2010, 11:48 am por *PsYkE1* »
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
He hecho esta bonita funcion mientras me aburria 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
|
|
|
En línea
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
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 (?)
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
... 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!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
@Karcrack Me aburria He hecho esta bonita funcion mientras me aburria AJAJAJA Te aburres mucho tu, ¿¿eh?? ... la cosa era usar un algoritmo ¬¬" no Expresiones R. tramposo ¬¬". jajaja. JAJAJJAJA Raul y sus Expr.Reg... Bueno aqui os dejo la funcion que prometi, que ademas capta los numeros negativos : 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!
|
|
« Última modificación: 6 Julio 2010, 20:25 pm por *PsYkE1* »
|
En línea
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
... 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 No funciona con los ultimos 2 numeros q puse
|
|
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
... 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 No funciona con los ultimos 2 numeros q puse JOJOJOJO No, si al final acabamos a tortas!! Salu2!
|
|
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Buen codigo Psyke, pero seria mas sencillo si trabajaras con Collections
|
|
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Gracias Karcrack! Lo tendre en cuenta para futuras ocasiones! Salu2!
|
|
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Buff, espero que no me llameis pesado , 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¡!
|
|
« Última modificación: 27 Julio 2010, 18:34 pm por *PsYkE1* »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Sacar numeros de una ecuacion? como?
.NET (C#, VB.NET, ASP)
|
Edu
|
8
|
6,212
|
14 Marzo 2011, 04:07 am
por .mokk.
|
|
|
Numeros de línea en etiquetas de código GeSHi.
Sugerencias y dudas sobre el Foro
|
avesudra
|
2
|
4,544
|
4 Septiembre 2012, 23:28 pm
por avesudra
|
|
|
Script cmd para extraer solo números en un texto.
Scripting
|
lizana16288
|
3
|
5,595
|
30 Abril 2016, 13:55 pm
por Eleкtro
|
|
|
Concatenar un conjunto de palabras para la misma búsqueda con find o findstr
Scripting
|
gregory90
|
9
|
6,973
|
26 Noviembre 2019, 19:50 pm
por andres3626
|
|
|
Programa que pide un conjunto de números y los cambia de posición
Scripting
|
ThePaquet1
|
2
|
3,945
|
9 Marzo 2021, 19:35 pm
por Serapis
|
|