Autor
|
Tema: [SOURCE] MultiSplit7913 Un split diferente XD (Leído 4,998 veces)
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!! Hoy 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!!!
|
|
« Última modificación: 14 Marzo 2011, 16:10 pm por 79137913 »
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Funciona, pero lo podrias mejorar Aqui te van unos ejemplos - Podrias ahorrarte las 3 llamadas a InStr guardandolas en una sola variable
- En lugar de guardar las posiciones con un flag, guarda en un array las posiciones de los delimitadores, asi despues evitas volver a recorrer la cadena (segundo for) y solo recorres el array y haces un mid, ya que tienes la posicion en el arreglo
Por lo demas, Esta buena la idea
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!!
Mmm, en cuanto al punto 1 si, lo voy a cambiar.
En cuanto al punto 2... En ese array que decis, ademas de la posicion del delimitador debo guardar el delimitador (osea delimitador(0) en posicion 3) eso me obliga a usar 2 vectores o una matriz, al usar una matriz tendria que saltar los espacios blancos que hay, pero si uso 2 vectores uno para la posicion y otro para el delimitador mmm... podria ser voy a probar.
Me dio fiaca hacer el punto 2 XD
GRACIAS POR LEER!!!
|
|
« Última modificación: 14 Marzo 2011, 16:06 pm por 79137913 »
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Puedes crear un tipo "marcador" con dos long, uno que indique el index del separador y otro que diga el index del char donde empieza, y asi sigues teniendo un solo arreglo
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!!
Si, hice eso cuando lo estapa haciendo, pero al usar instr por cada delimitador el vector estaria desordenado y ordenarlo es un bajon... la otra forma que tendria es con mid, pero seria mas lento.
GRACIAS POR LEER!!!
|
|
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Pero... si ya estas insertando ordenadamente :|
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!! No, Fijate que se hace un recorrido(hecho de instr en el while) por cada Delimitador, entonces si en el lugar 3 y 10 esta el delimitador 1 y en el lugar 7 esta el delimitador 2 el vector quedara asi: Pos.index(3,10,7) Pos.Delimit(1,1,2)
GRACIAS POR LEER!!!
|
|
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Me entendiste mal yo me referia asi Private Type Separador index As Long delimit As Long End Type
posicion 1 .index = 3 .Delimit = 1 posicion 2 .index = 10 .delimit = 2 posicion 3 .index = 7 .delimit = 1
te dije, usando un solo vector
|
|
|
En línea
|
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
Esa fue una de las formas que pensé yo!! DoEvents!
|
|
|
En línea
|
|
|
|
79137913
Desconectado
Mensajes: 1.169
4 Esquinas
|
HOLA!!!
Si, en un vector, lo entiendo, pero lo que te decia era que es un bajon ordenarlo.
GRACIASPOR LEER!!!
|
|
« Última modificación: 16 Marzo 2011, 13:56 pm por 79137913 »
|
En línea
|
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!" "La peor de las ignorancias es no saber corregirlas"
79137913 *Shadow Scouts Team*
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con split
Programación Visual Basic
|
Thaorius
|
8
|
2,790
|
29 Noviembre 2005, 22:29 pm
por Thaorius
|
|
|
Duda con Split
Programación Visual Basic
|
NYlOn
|
2
|
1,464
|
28 Noviembre 2005, 19:35 pm
por NYlOn
|
|
|
'Split' o 'Partir' Bmp ¿?
Programación Visual Basic
|
3k1n0x
|
8
|
2,521
|
7 Julio 2008, 04:41 am
por 3k1n0x
|
|
|
No me va el split second :(
Juegos y Consolas
|
Hacker wifi
|
2
|
3,238
|
2 Octubre 2010, 15:03 pm
por Hacker wifi
|
|
|
[C] Split
Programación C/C++
|
_*p
|
3
|
3,057
|
19 Febrero 2011, 15:55 pm
por _*p
|
|