Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: Juan Luis López en Junio 08, 2011, 01:26:59 pm

Título: Funcion GetFullDataBetween
Publicado por: Juan Luis López 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!!

Título: Re:Funcion GetFullDataBetween
Publicado por: Jen 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
Título: Re:Funcion GetFullDataBetween
Publicado por: Juan Luis López en Junio 08, 2011, 01:39:56 pm
no entiendo lo que quieres decir
Título: Re:Funcion GetFullDataBetween
Publicado por: raul338 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 (http://foro.elhacker.net/programacion_visual_basic/separar_partes_de_un_un_html_code-t320203.0.html;msg1583750#msg1583750)

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
Título: Re:Funcion GetFullDataBetween
Publicado por: Juan Luis López 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"
Título: Re:Funcion GetFullDataBetween
Publicado por: coco 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).