Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado 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.
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!!
-
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
-
no entiendo lo que quieres decir
-
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)
'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
-
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:
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:
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"
-
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).