elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [SOURCE] MultiSplit7913 Un split diferente XD
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [SOURCE] MultiSplit7913 Un split diferente XD  (Leído 4,487 veces)
79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
[SOURCE] MultiSplit7913 Un split diferente XD
« en: 14 Marzo 2011, 15:20 pm »

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:

Código
  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
  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
  49.  

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 Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #1 en: 14 Marzo 2011, 15:39 pm »

Funciona, pero lo podrias mejorar ;)

Aqui te van unos ejemplos :)

  • Podrias ahorrarte las 3 llamadas a InStr guardandolas en una sola variable :xD
  • 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 Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #2 en: 14 Marzo 2011, 15:49 pm »

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 Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #3 en: 14 Marzo 2011, 17:31 pm »

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 :P
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #4 en: 15 Marzo 2011, 15:46 pm »

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 Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #5 en: 15 Marzo 2011, 15:54 pm »

Pero... si ya estas insertando ordenadamente :|
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #6 en: 15 Marzo 2011, 16:29 pm »

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:

Código:
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 Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #7 en: 15 Marzo 2011, 20:11 pm »

Me entendiste mal :xD
yo me referia asi
Código:
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

:P te dije, usando un solo vector :P
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #8 en: 15 Marzo 2011, 20:21 pm »

Esa fue una de las formas que pensé yo!! :D

DoEvents! :P
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [SOURCE] MultiSplit7913 Un split diferente XD
« Respuesta #9 en: 15 Marzo 2011, 23:50 pm »

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*
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con split
Programación Visual Basic
Thaorius 8 2,369 Último mensaje 29 Noviembre 2005, 22:29 pm
por Thaorius
Duda con Split
Programación Visual Basic
NYlOn 2 1,344 Último mensaje 28 Noviembre 2005, 19:35 pm
por NYlOn
'Split' o 'Partir' Bmp ¿?
Programación Visual Basic
3k1n0x 8 2,289 Último mensaje 7 Julio 2008, 04:41 am
por 3k1n0x
No me va el split second :(
Juegos y Consolas
Hacker wifi 2 3,046 Último mensaje 2 Octubre 2010, 15:03 pm
por Hacker wifi
[C] Split
Programación C/C++
_*p 3 2,835 Último mensaje 19 Febrero 2011, 15:55 pm
por _*p
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines