Autor Tema: Funcion GetFullDataBetween  (Leído 4260 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Juan Luis López

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +2/-0
  • No nos mires ¡UNETE!
    • Ver Perfil
    • #spanishrevolution
Funcion GetFullDataBetween
« en: Junio 08, 2011, 01:26:59 pm »
Hola os traigo una funcion que sirve para buscar en un texto cadenas de texto que se encuentran entre otras 2 que se pasan como parametros.
La estoy empleando para extraer de un codigo html todos los atribitos "src" de los links y tener asi una lista de los links que tiene la web.

Código: [Seleccionar]
Public Function GetFullDataBetween(RawData As String, StartString As String, EndString As String)
    Dim Comienzo As Long
    Dim Final As Long
    Dim Mydata As String
    Dim Contador As Integer
    Comienzo = 1
    On Error GoTo Salir
    While Comienzo <> 0
        Comienzo = InStr(Comienzo, RawData, StartString)
        Final = InStr(Comienzo, RawData, EndString)
        Contador = Contador + 1
        Mydata = Mid(RawData, Comienzo + Len(StartString), Final - Comienzo - Len(StartString))
        '
        'Poner aqui un procedimiento al que se le pase como variable Mydata
        '
        Mydata = ""
        Comienzo = Final
    Wend
Salir:
    Exit Function
End Function

 'Poner aqui un procedimiento al que se le pase como variable Mydata...
¿Para qué sirve esto?
pues bien imaginemos que quiero buscar hipervinculos del estilo:
<a href="http://www.miweb.com"><img src="http://www.images.miweb.com"></a>
Si quiero añadir http://www.miweb.com a una lista y la imagen mostrarla en un formulario (por ejemplo)
Crearía aparte un sub que haga esto y asi no tener que modificar la funcion.

Saludos!!

Juventud SIN futuro. Sin casa, sin curro, sin pensión, ¡Sin miedo!

Jen

  • Kilobyte
  • **
  • Mensajes: 54
  • Reputación: +2/-0
    • Ver Perfil
Re:Funcion GetFullDataBetween
« Respuesta #1 en: Junio 08, 2011, 01:34:35 pm »
Código: [Seleccionar]

Private Sub Form_Load()
   Dim s As String
   s = "<a href='http://www.miweb.com'><img src='http://www.images.miweb.com'></a>"
   Debug.Print Text_Between_Words(s, "<img src='", "'>")
End Sub

Private Function Text_Between_Words(Text As String, String1 As String, String2 As String) As String

Dim Pos1 As Long, Pos2 As Long, Start As Long
   
    If Not Len(Text) then exit function
    Pos1 = InStr(Text, String1)
    If Pos1 <> 0 Then Start = Pos1 + Len(String1): Pos2 = InStr(Start, Text, String2) Else Exit Function
    If Pos2 <> 0 Then Text_Between_Words = Mid$(Text, Start, Pos2 - Start)

End Function
« última modificación: Junio 08, 2011, 03:42:04 pm por xkiz ™ »

Juan Luis López

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +2/-0
  • No nos mires ¡UNETE!
    • Ver Perfil
    • #spanishrevolution
Re:Funcion GetFullDataBetween
« Respuesta #2 en: Junio 08, 2011, 01:39:56 pm »
no entiendo lo que quieres decir
Juventud SIN futuro. Sin casa, sin curro, sin pensión, ¡Sin miedo!

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Funcion GetFullDataBetween
« Respuesta #3 en: Junio 08, 2011, 04:23:00 pm »
El te puso una alternativa
Aca tenes un par mas

   Re: Separar partes de un un html code

Código: (vb) [Seleccionar]
'by Mr.Frog™
Public Function TextBetweenWords(ByRef strText$, ByRef strWord1$, ByRef strWord2$) As String
Dim lngPos1&, lngPos2&, lngStart&
 
    lngPos1 = InStr(strText, strWord1)
    If lngPos1 Then
        lngStart = lngPos1 + LenB(strWord1) \ 2
        lngPos2 = InStr(lngStart, strText, strWord2)
        If iPosition2 Then
            TextBetweenWords = Mid$(strText, lngStart, lngPos2 - lngStart)
        End If
    End If
End Function

Juan Luis López

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +2/-0
  • No nos mires ¡UNETE!
    • Ver Perfil
    • #spanishrevolution
Re:Funcion GetFullDataBetween
« Respuesta #4 en: Junio 09, 2011, 06:20:08 pm »
entiendo pero si yo tengo una cadena:
a= "somos 4 personas. Uno se llama <Juan>, su hermano se llama <Pepe>, yo me llamo <Juan Luis> y mi padre es <Fernando>."

si lo que quiero es que me devuelva todos los nombres necesito que se me devuelva lo que esta entre "<" y ">", pero con textbetweenwords solo me devolvería la primera ("Juan") en cambio con la mia te devuelve todas si haces:
Código: [Seleccionar]
Public Function GetFullDataBetween(RawData As String, StartString As String, EndString As String)
    Dim Comienzo As Long
    Dim Final As Long
    Dim Mydata As String
    Dim Contador As Integer
    Comienzo = 1
    On Error GoTo Salir
    While Comienzo <> 0
        Comienzo = InStr(Comienzo, RawData, StartString)
        Final = InStr(Comienzo, RawData, EndString)
        Contador = Contador + 1
        Mydata = Mid(RawData, Comienzo + Len(StartString), Final - Comienzo - Len(StartString))
        '
       MSGBOX MYDATA
        '
        Mydata = ""
        Comienzo = Final
    Wend
Salir:
    Exit Function
End Function

en cambio se hago:

Código: [Seleccionar]
msgbox (textbetweenwords("somos 4 personas. Uno se llama <Juan>, su hermano se llama <Pepe>, yo me llamo <Juan Luis> y mi padre es <Fernando>.","<",">"))
esto solo me devolvería "Juan"
Juventud SIN futuro. Sin casa, sin curro, sin pensión, ¡Sin miedo!

coco

  • Administrador
  • Terabyte
  • *****
  • Mensajes: 548
  • Reputación: +63/-3
    • Ver Perfil
Re:Funcion GetFullDataBetween
« Respuesta #5 en: Junio 09, 2011, 11:40:43 pm »
Mira, yo siempre use una funcion similar, pero para hacer esas iteraciones, simplemente segui buscando luego del string que encontraste, osea:
si Juan esta en el caracter 39 (tire un numero por tirar), entonces, segui buscando en 39+Len("Juan")+1.
El 39 viene de la primera ocurrencia encontrada, el Len mas que obvio, y el +1 es para omitir el caracter final de lo que encontraste... Tambien podria ser un Len(strEndChar).
'-     coco
(No me cabe: Java, Python ni Pascal)
SQLite - PIC 16F y 18F - ARM STM32 - ESP32 - Linux Embebido - VB6 - Electronica - Sonido y Ambientacion