Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: 79137913 en 12 Junio 2012, 15:25 pm



Título: [RETO] Funcion EntreTextos
Publicado por: 79137913 en 12 Junio 2012, 15:25 pm
HOLA!!!

El reto consiste en hacer la version mas rapida de la siguiente funcion:

Busca un string entre otros 2 strings.

Por ejemplo :

Código
  1. Private Sub Form_Load()
  2.    str1 = "hola franco como andas, hola pepe como andas"
  3.    str2 = "hola "
  4.    str3 = " como"
  5.    Debug.Print EntreTextos(str1, str2, str3)
  6.    'imprimira: "franco"
  7.    'como veran solo la primera asi que ojo XD
  8. End Sub
  9.  
  10. Public Function EntreTextos(Text As String, Text1 As String, Text2 As String) As String
  11.    EntreTextos = MidB$(Text, InStrB(Text, Text1) + LenB(Text1), InStrB(Text, Text2) - InStrB(Text, Text1) - LenB(Text1))
  12. End Function
  13.  
  14. 'o esta:
  15.  
  16. Public Function EntreTextos(Text As String, Text1 As String, Text2 As String) As String
  17.    Dim a As Long
  18.    a = InStrB(Text, Text1)
  19.    If a Then
  20.        Dim b As Long
  21.        b = InStrB(Text, Text2)
  22.        If b Then
  23.            Dim c As Long
  24.            Dim d As Long
  25.            c = LenB(Text1)
  26.            d = InStrB(Text, Text2) - a - c
  27.            If d > 0 Then
  28.                EntreTextos = MidB$(Text, a + c, d)
  29.    End If
  30.    End If
  31.    End If
  32. End Function
  33.  

yo participo directamente con la que figura alli

GRACIAS POR LEER!!!


Título: Re: [RETO] Funcion EntreTextos
Publicado por: Psyke1 en 12 Junio 2012, 16:35 pm
Dejo la mía:
Código
  1. Option Explicit
  2.  
  3. 'by Psyke1
  4. Public Static Function TextBTWWords(ByRef sMain As String, ByRef s1 As String, ByRef s2 As String) As String
  5. Dim lPos1                   As Long
  6. Dim lPos2                   As Long
  7. Dim lStart                  As Long
  8.  
  9.    lPos1 = InStrB(1, sMain, s1, vbBinaryCompare)
  10.    If lPos1 = 0 Then Exit Function
  11.  
  12.    lStart = lPos1 + LenB(s1)
  13.    lPos2 = InStrB(lStart, sMain, s2, vbBinaryCompare)
  14.    If lPos2 = 0 Then Exit Function
  15.  
  16.    TextBTWWords = MidB$(sMain, lStart, lPos2 - lStart)
  17. End Function
  18.  
  19. Private Sub Form_Load()
  20.    Debug.Print TextBTWWords("qwertysdfcv [raul338 es feo] prueba", "[", "]")
  21.    Debug.Print TextBTWWords("aitheoiethi[BLABLABLA]taihoithaoihtoea", "(", "]")
  22.    Debug.Print TextBTWWords("aitheoiethi[BLABLABLA)taihoithaoihtoea", ")", "[")
  23.    Debug.Print TextBTWWords("qwertysdfcv raul338 es feo] prueba", "[", "]")
  24.    Debug.Print TextBTWWords("aitheoiet[hi[BLABLABLA]taihoithaoihtoea", "[", "]")
  25. End Sub

El domingo pongo mi versión API-Doping, aunque dudo que se pueda hacer más rápida aún... :-\
Demostradme que me equivoco. :rolleyes:

DoEvents! :P