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:
Private Sub Ejemplo()
Dim dels(3) As String
Dim result() As String
Const ss As String = "hola+como--andas(((esto====es+una--prueba"
dels(0) = "+"
dels(1) = "--"
dels(2) = "((("
dels(3) = "===="
'sin preservar delimitadores
result = MultiSplit7913(ss, dels, False)
'result = ("hola";"como";"andas";"esto";"es";"una";"prueba")
'preservando delimitadores
result = MultiSplit7913(ss, dels, True)
'result = ("hola";"+como";"--andas";"(((esto";"====es";"+una";"--prueba")
End Sub
El Codigo
Private Function MultiSplit7913(expression As String, Delimiter() As String, PreserveDel As Boolean) As String()
Dim DelCount As Long
Dim lExp As Long
Dim X As Long
Dim Pos As Long
Dim DelPos() As Long
Dim AuxArr() As String
Dim LastPos As Long
Dim LastLen As Long
Dim LastInstr As Long
expression = expression & Delimiter(0)
lExp = Len(expression)
DelCount = UBound(Delimiter)
ReDim DelPos(lExp)
For X = 0 To DelCount
Pos = 1
LastInstr = InStr(Pos, expression, Delimiter(X))
Do While LastInstr <> 0
DelPos(LastInstr) = X + 1
Pos = LastInstr + Len(Delimiter(X)) + Pos
LastInstr = InStr(Pos, expression, Delimiter(X))
Loop
Next
ReDim AuxArr(0)
LastPos = 1
For X = 0 To lExp
If DelPos(X) <> 0 Then
ReDim Preserve AuxArr(UBound(AuxArr) + 1)
If PreserveDel Then
AuxArr(UBound(AuxArr) - 1) = Mid$(expression, LastPos, X - LastPos)
Else
AuxArr(UBound(AuxArr) - 1) = Mid$(expression, LastPos + LastLen, X - LastPos - LastLen)
LastLen = Len(Delimiter(DelPos(X) - 1))
End If
LastPos = X
End If
Next
ReDim Preserve AuxArr(UBound(AuxArr) - 1)
MultiSplit7913 = AuxArr
End Function
GRACIAS POR LEER!!!
bastante interesante, para variar un poco del split común, de todos modos es bastante útil.
saludos!