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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [SOLUCIONADO] Split
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Split  (Leído 3,026 veces)
Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
[SOLUCIONADO] Split
« en: 19 Julio 2013, 09:28 am »

Hola, estaba tratando de hacer algo mientras me topé con un problema, tal vez parezca tonto o quizá nunca necesité algo así.

Lo que quiero lograr, es encontrar la posición con respecto a un index de un Split.

Code:

Form:
Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4. Call ConfigArray
  5.  
  6. Call Stuff
  7.  
  8. End
  9. End Sub
  10.  
  11.  

Module:
Código
  1. Option Explicit
  2.  
  3. Public MyByteArray() As Byte
  4. Public Const StrByteArray As String = "255,254,253,0,252,0,0,0,251,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,250,0,0,0,0,0,0," & _
  5.                                      "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0," & _
  6.                                      "0,0,3,4,248,3,0,247,246,5,6,2,245,244,5,6,243,242,7,241,8,240,9,10,239,9,11,12,8,238,11," & _
  7.                                      "13,13,10,237,8,236,14,8,9,235,13,8,7,13,8,7,234,233,8,12,10,232,14,231,15,15,230,229,0,0,0," & _
  8.                                      "0,0,0,0,228,227,226,16,5,2,17,18,5,2,17,18,5,2,17,18,225,224,4,18,223,2,17,18,222,19,18," & _
  9.                                      "18,20,2,17,18,21,22,221,18,220,2,17,18,21,22,219,18,23,2,17,18,5,2,218,18,16,2,17,18,21,22," & _
  10.                                      "217,18,19,2,17,18,21,22,216,218,23,2,17,18,21,22,215,18,20,2,17"
  11. Public MaxArray As Integer
  12.  
  13. Public Sub ConfigArray()
  14. Dim i As Integer
  15.  
  16. MaxArray = UBound(Split(StrByteArray, ","))
  17. ReDim MyByteArray(0 To MaxArray) As Byte
  18.  
  19. For i = 0 To MaxArray
  20.    MyByteArray(i) = Split(StrByteArray, ",")(i)
  21. Next i
  22. End Sub
  23.  
  24. Public Sub Stuff()
  25. Dim i As Integer
  26. Dim CurrentByte As Byte
  27. Dim found As Long
  28. Dim CurrentPos As Long
  29.  
  30. For i = 0 To MaxArray
  31.    If i = 5 Then
  32.        'Ejemplo, index 5 -> 255,254,253,0,252,0,
  33.        CurrentByte = MyByteArray(i)
  34.        CurrentPos = Aca quiero obtener la posicion del index 5
  35.    End If
  36. Next i
  37. End Sub
  38.  

CurrentPos = Aca quiero obtener la posicion del index 5, que sería 19

Alguna idea o algún comando mágico que me retorne la posición según el index?


« Última modificación: 20 Julio 2013, 15:51 pm por Miseryk » En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [AYUDA] Split
« Respuesta #1 en: 19 Julio 2013, 14:48 pm »

No entiendo de que queres la posicion:
La posición en el string del valor que esta en el array (index 1, pos 1; index 2, pos 4; index 3, pos 8; index 4, pos 12; index 5, pos 13...)
Si es así deberias sumar el length del string de cada uno de los items del array que vas recorriendo + el contador (la cantidad de separadores que pasaste)

Otra cosa, ConfigArray se puede optimizar mucho! Trata de usar una sola vez Split y trabaja con el array devuelto, ese for con el split adentro tarda mucho porque tiene hacer tantas veces split una y otra vez cuando ya lo hizo antes para obtener el ubound!
Ademas de que estas duplicando el array que te devuelve el split


En línea

Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: [AYUDA] Split
« Respuesta #2 en: 19 Julio 2013, 20:43 pm »

Muy cierto, no me había dado cuenta. Muchas gracias, de lo la longitud lo pude hacer, pero de otra manera a la que quería.

Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4. Call ConfigArray
  5.  
  6. Call Stuff
  7.  
  8. End
  9. End Sub
  10.  
  11.  

Código
  1. Option Explicit
  2.  
  3. Public MyByteArray() As Byte
  4.  
  5. Public Const StrByteArray As String = "255,254,253,0,252,0,0,0,251,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,250,0,0,0,0,0,0," & _
  6.                                      "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0," & _
  7.                                      "0,0,3,4,248,3,0,247,246,5,6,2,245,244,5,6,243,242,7,241,8,240,9,10,239,9,11,12,8,238,11," & _
  8.                                      "13,13,10,237,8,236,14,8,9,235,13,8,7,13,8,7,234,233,8,12,10,232,14,231,15,15,230,229,0,0,0," & _
  9.                                      "0,0,0,0,228,227,226,16,5,2,17,18,5,2,17,18,5,2,17,18,225,224,4,18,223,2,17,18,222,19,18," & _
  10.                                      "18,20,2,17,18,21,22,221,18,220,2,17,18,21,22,219,18,23,2,17,18,5,2,218,18,16,2,17,18,21,22," & _
  11.                                      "217,18,19,2,17,18,21,22,216,218,23,2,17,18,21,22,215,18,20,2,17"
  12. Public MaxArray As Integer
  13.  
  14. Public colObject As New Collection
  15.  
  16. Public Sub ConfigArray()
  17. Dim i As Integer
  18. Dim pos As Double
  19. Dim newpos As Double
  20. Dim SplitOneTime As Variant
  21.  
  22. SplitOneTime = Split(StrByteArray, ",")
  23.  
  24. MaxArray = UBound(SplitOneTime)
  25.  
  26. ReDim MyByteArray(0 To MaxArray) As Byte
  27.  
  28. pos = 1
  29.  
  30. For i = 0 To MaxArray
  31.    MyByteArray(i) = SplitOneTime(i)
  32.    If i = 0 Then
  33.        colObject.Add Array((i + 1), CStr(1))
  34.    Else
  35.        newpos = InStr(pos, StrByteArray, ",") + 1
  36.        colObject.Add Array((i + 1), CStr(newpos))
  37.        pos = newpos
  38.    End If
  39. Next i
  40. End Sub
  41.  
  42. Public Sub Stuff()
  43. Dim i As Integer
  44. Dim CurrentByte As Byte
  45. Dim found As Double
  46. Dim CurrentPos As Double
  47. Dim NextPos As Double
  48. Dim FirstPattern As String
  49. Dim SecondPattern As String
  50.  
  51. For i = 0 To MaxArray
  52.    'Ejemplo, index 5 -> 255,254,253,0,252,0,0,0,251,0,0,0,1,1,0,0,0
  53.    CurrentByte = MyByteArray(i)
  54.    If i = 103 Then
  55.        Stop
  56.        CurrentPos = colObject(i + 1)(1)
  57.        NextPos = colObject(i + 2)(1)
  58.        found = InStr(NextPos, StrByteArray, CurrentByte)
  59.  
  60.        FirstPattern = Mid(StrByteArray, CurrentPos, found - CurrentPos) '= "13,8,7,"
  61.        SecondPattern = Mid(StrByteArray, found, found - CurrentPos) '= "13,8,7,"
  62.  
  63.        MsgBox StrComp(FirstPattern, SecondPattern) = 0
  64.    End If
  65. Next i
  66. End Sub
  67.  

Ahí obtuve el CurrentPos y el NextPos que quería para encontrar coincidencias con mid y found.

PD: pero no es lo que quería, no quería usar
Código
  1. Public colObject As New Collection
para obtener las posiciones en mid para el index del array o del split.
« Última modificación: 19 Julio 2013, 21:07 pm por Miseryk » En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
DarkMatrix

Desconectado Desconectado

Mensajes: 150


Nuestro Limite es la Imaginacion


Ver Perfil WWW
Re: [AYUDA] Split
« Respuesta #3 en: 20 Julio 2013, 03:10 am »

Y asi:

Código
  1. Option Explicit
  2.  
  3. Public MyBytePos()        As Long
  4. Public MyByteArray()      As Byte
  5.  
  6. Public Const StrByteArray As String = "255,254,253,0,252,0,0,0,251,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,250,0,0,0,0,0,0," & _
  7.                                     "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0," & _
  8.                                     "0,0,3,4,248,3,0,247,246,5,6,2,245,244,5,6,243,242,7,241,8,240,9,10,239,9,11,12,8,238,11," & _
  9.                                     "13,13,10,237,8,236,14,8,9,235,13,8,7,13,8,7,234,233,8,12,10,232,14,231,15,15,230,229,0,0,0," & _
  10.                                     "0,0,0,0,228,227,226,16,5,2,17,18,5,2,17,18,5,2,17,18,225,224,4,18,223,2,17,18,222,19,18," & _
  11.                                     "18,20,2,17,18,21,22,221,18,220,2,17,18,21,22,219,18,23,2,17,18,5,2,218,18,16,2,17,18,21,22," & _
  12.                                     "217,18,19,2,17,18,21,22,216,218,23,2,17,18,21,22,215,18,20,2,17"
  13.  
  14. Public MaxArray           As Integer
  15.  
  16. Public Sub ConfigArray()
  17.  
  18.    Dim I              As Integer
  19.    Dim Pos            As Double
  20.    Dim NewPos         As Double
  21.    Dim SplitOneTime() As String
  22.  
  23.    SplitOneTime = Split(StrByteArray, ",")
  24.  
  25.    MaxArray = UBound(SplitOneTime)
  26.  
  27.    ReDim MyBytePos(0 To MaxArray)
  28.    ReDim MyByteArray(0 To MaxArray)
  29.  
  30.    Pos = 1
  31.  
  32.    For I = 0 To MaxArray
  33.  
  34.        MyByteArray(I) = CByte(SplitOneTime(I))
  35.  
  36.        If I = 0 Then
  37.  
  38.            MyBytePos(I) = 1
  39.  
  40.        Else
  41.  
  42.            MyBytePos(I) = (MyBytePos(I - 1) + Len(SplitOneTime(I - 1))) + 1
  43.  
  44.        End If
  45.  
  46.    Next I
  47.  
  48.    'MsgBox MyBytePos(5) ' = 19
  49.    'MsgBox MyBytePos(40) ' = 93
  50.  
  51. End Sub
  52.  
  53. Public Sub Stuff()
  54.  
  55.    Dim I             As Integer
  56.    Dim CurrentByte   As Byte
  57.    Dim found         As Double
  58.    Dim CurrentPos    As Double
  59.    Dim NextPos       As Double
  60.    Dim FirstPattern  As String
  61.    Dim SecondPattern As String
  62.  
  63.    For I = 0 To MaxArray
  64.  
  65.        'Ejemplo, index 5 -> 255,254,253,0,252,0,0,0,251,0,0,0,1,1,0,0,0
  66.  
  67.        CurrentByte = MyByteArray(I)
  68.  
  69.        If I = 103 Then
  70.  
  71.            Stop
  72.  
  73.            CurrentPos = MyBytePos(I)
  74.  
  75.            NextPos = MyBytePos(I + 1)
  76.  
  77.            found = InStr(NextPos, StrByteArray, CurrentByte)
  78.  
  79.            FirstPattern = Mid(StrByteArray, CurrentPos, found - CurrentPos) '= "13,8,7,"
  80.            SecondPattern = Mid(StrByteArray, found, found - CurrentPos) '= "13,8,7,"
  81.  
  82.            MsgBox StrComp(FirstPattern, SecondPattern) = 0
  83.  
  84.        End If
  85.  
  86.    Next I
  87.  
  88. End Sub
  89.  
En línea

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix
Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: [AYUDA] Split
« Respuesta #4 en: 20 Julio 2013, 04:15 am »

También, pero andaba buscando algún método o algo del split
Código
  1. SplitOneTime = Split(StrByteArray, ",")
con el cual pueda obtener esa pocisión sin tener que declarar otra varible ya sea array o collección.
« Última modificación: 20 Julio 2013, 04:17 am por Miseryk » En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
Miseryk

Desconectado Desconectado

Mensajes: 225


SI.NU.SA U.GU.DE (2NE1 - D-Unit)


Ver Perfil
Re: [AYUDA] Split
« Respuesta #5 en: 20 Julio 2013, 15:51 pm »

Aunque no sea la respuesta que quiero, me ayuda a resolver mi problema, es por éso que lo pongo como SOLUCIONADO y no como RESUELTO, si quieren aportar nuevas cosas, bienvenidos sean :D

Gracias a todos.
En línea

Can you see it?
The worst is over
The monsters in my head are scared of love
Fallen people listen up! It’s never too late to change our luck
So, don’t let them steal your light
Don’t let them break your stride
There is light on the other side
And you’ll see all the raindrops falling behind
Make it out tonight
it’s a revolution

CL!!!
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [SOLUCIONADO] Split
« Respuesta #6 en: 21 Julio 2013, 09:38 am »

Esto es mas fácil que un split... y te olvidas de convertir de string a byte o integer

Código
  1.  
  2. dim MyBytePos() as Byte ' Si los numeros en el Array son mayors usa Integer en lugar de byte y si son mayores usa long y si no pss Double....
  3.  
  4. MyBytePos = Array(255,254,253,0,252,0,0,0,251,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,250,0,0,0,0,0,0, _
  5. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0, _
  6. 0,0,3,4,248,3,0,247,246,5,6,2,245,244,5,6,243,242,7,241,8,240,9,10,239,9,11,12,8,238,11, _
  7. 13,13,10,237,8,236,14,8,9,235,13,8,7,13,8,7,234,233,8,12,10,232,14,231,15,15,230,229,0,0,0, _
  8. 0,0,0,0,228,227,226,16,5,2,17,18,5,2,17,18,5,2,17,18,225,224,4,18,223,2,17,18,222,19,18, _
  9. 18,20,2,17,18,21,22,221,18,220,2,17,18,21,22,219,18,23,2,17,18,5,2,218,18,16,2,17,18,21,22, _
  10. 217,18,19,2,17,18,21,22,216,218,23,2,17,18,21,22,215,18,20,2,17)
  11.  
  12. debug.print chr(34) & Join(days(), ",") & chr(34) ' Esta linea la puedes quitar sin problemas
  13.  
  14. debug.print "Posicion Numero 0:"; MyBytePos(0)
  15. debug.print "Posicion Numero 5:"; MyBytePos(5)
  16.  

Dulces Lunas!¡.
« Última modificación: 21 Julio 2013, 09:43 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No me va el split second :(
Juegos y Consolas
Hacker wifi 2 3,232 Último mensaje 2 Octubre 2010, 15:03 pm
por Hacker wifi
[C] Split
Programación C/C++
_*p 3 3,041 Último mensaje 19 Febrero 2011, 15:55 pm
por _*p
Split C++
Programación C/C++
|Apeiron| 0 2,045 Último mensaje 21 Noviembre 2011, 16:18 pm
por |Apeiron|
[SOLUCIONADO] VB Split
Programación C/C++
Miseryk 3 2,935 Último mensaje 24 Enero 2012, 19:29 pm
por Miseryk
Split en C
Programación C/C++
Distorsion 4 2,746 Último mensaje 29 Octubre 2012, 03:18 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines