comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

MultiSplit, un split diferente!

  • 1 Respuestas
  • 2898 Vistas

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

Conectado 79137913

  • *
  • Moderator
  • Mensajes: 625
  • Actividad:
    13.33%
  • Reputación 10
  • 4 Esquinas
    • Ver Perfil
    • Doors.Party
    • Email
  • Skype: fg_mdq@hotmail.com
« en: Febrero 05, 2013, 09:32:21 am »
HOLA!!!

Queria hacer un split que devuelva un array con varios delimitadores y aparte tenga la opcion de guardar el delimitador... en fin... hice esta funcion, espero que les sirva.

Antes que el codigo Ejemplo:

Código: Visual Basic
  1. Private Sub Ejemplo()
  2. Dim dels(3) As String
  3. Dim result() As String
  4. Const ss As String = "hola+como--andas(((esto====es+una--prueba"
  5.     dels(0) = "+"
  6.     dels(1) = "--"
  7.     dels(2) = "((("
  8.     dels(3) = "===="
  9.    
  10.     'sin preservar delimitadores
  11.    result = MultiSplit7913(ss, dels, False)
  12.     'result = ("hola";"como";"andas";"esto";"es";"una";"prueba")
  13.    
  14.     'preservando delimitadores
  15.    result = MultiSplit7913(ss, dels, True)
  16.     'result = ("hola";"+como";"--andas";"(((esto";"====es";"+una";"--prueba")
  17. End Sub

El Codigo

Código: Visual Basic
  1. Private Function MultiSplit7913(expression As String, Delimiter() As String, PreserveDel As Boolean) As String()
  2. Dim DelCount    As Long
  3. Dim lExp        As Long
  4. Dim X           As Long
  5. Dim Pos         As Long
  6. Dim DelPos()    As Long
  7. Dim AuxArr()    As String
  8. Dim LastPos     As Long
  9. Dim LastLen     As Long
  10. Dim LastInstr   As Long
  11.  
  12.     expression = expression & Delimiter(0)
  13.     lExp = Len(expression)
  14.     DelCount = UBound(Delimiter)
  15.     ReDim DelPos(lExp)
  16.  
  17.     For X = 0 To DelCount
  18.         Pos = 1
  19.         LastInstr = InStr(Pos, expression, Delimiter(X))
  20.         Do While LastInstr <> 0
  21.             DelPos(LastInstr) = X + 1
  22.             Pos = LastInstr + Len(Delimiter(X)) + Pos
  23.             LastInstr = InStr(Pos, expression, Delimiter(X))
  24.         Loop
  25.     Next
  26.  
  27.     ReDim AuxArr(0)
  28.  
  29.     LastPos = 1
  30.  
  31.     For X = 0 To lExp
  32.         If DelPos(X) <> 0 Then
  33.             ReDim Preserve AuxArr(UBound(AuxArr) + 1)
  34.             If PreserveDel Then
  35.                 AuxArr(UBound(AuxArr) - 1) = Mid$(expression, LastPos, X - LastPos)
  36.             Else
  37.                 AuxArr(UBound(AuxArr) - 1) = Mid$(expression, LastPos + LastLen, X - LastPos - LastLen)
  38.                 LastLen = Len(Delimiter(DelPos(X) - 1))
  39.             End If
  40.             LastPos = X
  41.         End If
  42.     Next
  43.  
  44.     ReDim Preserve AuxArr(UBound(AuxArr) - 1)
  45.  
  46.     MultiSplit7913 = AuxArr
  47.  
  48. End Function

GRACIAS POR LEER!!!
« Última modificación: Diciembre 12, 2013, 03:49:31 pm por Expermicid »
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scout Team*                                                   You are not allowed to view links. Register or Login

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #1 en: Febrero 06, 2013, 03:03:32 pm »
bastante interesante, para variar un poco del split común, de todos modos es bastante útil.

saludos!

 

¿Te gustó el post? COMPARTILO!