Avatar billede vbrookie Nybegynder
16. september 2002 - 13:07 Der er 12 kommentarer og
1 løsning

Finde links og tabel-rækker

Er der nogle der har eksempler på hvordan man henter links og table rows ud fra en hjemmeside via. VB ?

Jeg har lavet den del der henter en url og laver den om til en streng, i min kode hedder strengen StrHtml


Jeg har brug for at generere en liste over alle links i en strengen.

Jeg har brug for at kunne generere en kommasepareret liste over rækkerne i en html-tabel, en kommasepareret streng pr. html-tabel.

VbRookie
Avatar billede martin_moth Mester
16. september 2002 - 13:19 #1
Du kan jo søge på "<a href=" og "</a>" for at identificere links i din tekststreng.

Hvis du antager, der ikke er fejl i html-koden, og der ikke er links der er "kommenteret ud", så vil du have et link hver gang du støder på "</a>" - så søg efter "</a> og tæl hvor mange gange de forekommer.

/Martin
Avatar billede martin_moth Mester
16. september 2002 - 13:20 #2
Tilsvarende for rækker, naturligvis ;o)
Avatar billede martin_moth Mester
16. september 2002 - 13:25 #3
Wups - så lige antallet af points - du vil nok have noget kode også - vender tilbage, med mindre andre kommer mig i forkøbet ;o)
Avatar billede vbrookie Nybegynder
16. september 2002 - 13:42 #4
Cool Martin, det med links er ikke så vigtigt for mig som det med rækkerne :)
Avatar billede martin_moth Mester
16. september 2002 - 14:25 #5
Hej igen - nu har jeg lige lavet en kode der finder links - jeg gik igang inden du skrev ovenstående :o(

Her er den - smid 2 knapper og en ListBox på en form, Kopier nedenstående og ret stien til html-dokumentet:

Dim strHtml As String

Private Sub Command1_Click()

'Indlæser hele html-dokumentet til strHtml
  Open "c:\Test.html" For Input As #1  '<-- STIEN SKAL RETTES
  strHtml = Input(LOF(1), 1)
  Close #1
End Sub

Private Sub Command2_Click()
 
'Dimmer diverse variable
  Dim i As Integer
  Dim LinkArray() As String
  Dim AntalLinks As Integer
  Dim strHtml_Lcase As String
  Dim Start As Integer
  Dim nystart As Integer

'Opretter streng med kun små bogstaver, og finder forekomster af "</a>"
'Hvis man ikke bruger Lcase, er der forskel på </A> og </a>!!!
  strHtml_Lcase = LCase(strHtml)
  LinkArray() = Split(strHtml_Lcase, "</a>")
  AntalLinks = UBound(LinkArray)
 
'Redimmer LinkArray
  ReDim LinkArray(1 To AntalLinks)
 
'Looper gennem tekststrengen, finder links og gemmer dem i LinkArray
  For i = 1 To AntalLinks
    Start = InStr(nystart + 1, strHtml_Lcase, "<a href=") + 8
    LinkArray(i) = Mid(strHtml, Start, InStr(Start, strHtml_Lcase, ">") - Start)
    nystart = Start
   
  Next i
 
' Viser alle links
  List1.Clear
  For i = 1 To AntalLinks
    List1.AddItem LinkArray(i)
  Next i
 
End Sub


Noget helt analogt kan laves til tabeller ;o)
Avatar billede vbrookie Nybegynder
16. september 2002 - 14:33 #6
Kigger lige på den, 2 min...
Avatar billede vbrookie Nybegynder
16. september 2002 - 14:40 #7
Det virker fint nok Martin, jeg har bare store problemer med at få trukket tabel-rækker ud på samme måde, har du et bud på det ?, jeg smider gerne nogle flere points på bordet :)
Avatar billede martin_moth Mester
16. september 2002 - 14:49 #8
Giv mig lige 10 minutter ;o)
Avatar billede vbrookie Nybegynder
16. september 2002 - 14:51 #9
Cool, thanx.. :)
Avatar billede martin_moth Mester
16. september 2002 - 15:03 #10
Jeg skriver kun ændringer i forhold til ovenstående kode:

  LinkArray() = Split(strHtml_Lcase, "</tr>")

  Start = InStr(nystart + 1, strHtml_Lcase, "<tr") + 3

  LinkArray(i) = Mid(strHtml, Start, InStr(Start, strHtml_Lcase, "tr>") - Start)


                      -o-

Ovenstående giver dig alt hvad der står i html-dokumentet mellem alle "<tr" og alle "</tr>"  - og det ser grimt ud, jf. følgende eksempel:

I en HTML-fil står der:

"<table border=0 cellspacing=15 width=550 align="center">
  <tr>
    <td valign="top" width="100%">
      <b>L</b>idt statistik. Denne hjemmeside indeholder:
    <menu>
      <li>257 .html filer
      <li>249 .jpg billedfiler
    </menu>
    </td>
  </tr>
</table>"


Det bliver til:

"valign="top" width="100%"><b>L</b>idt statistik. Denne hjemmeside Indeholder: <menu><li>257 .html filer<li>249 .jpg billedfiler</menu></td></table>"


Og du ville garanteret kun have:

"Lidt Statestik. Denne hjemmeside indeholder: 257 .html filer 249 .jpg billedfiler"

Hvis du vil lave om på det er det lige pludseligt et - synes jeg - megaprojekt du har gang i. Du skal borsortere alle html-tags, og det synes jeg må være ret omfattende.

Så hvis ovenstående ikke er det du ønsker, ville jeg foreslå dig at finde en anden fremgangsmåde uden at bruge VB - eller bare gå i gang i VB, for det KAN jo lade sig gøre, men jeg vil tro det bliver meget omfattende at kode

/Martin
Avatar billede martin_moth Mester
16. september 2002 - 15:04 #11
Ups - 3. linie med rettelser skulle være:

LinkArray(i) = Mid(strHtml, Start, InStr(Start, strHtml_Lcase, "</tr>") - Start)
Avatar billede vbrookie Nybegynder
16. september 2002 - 15:13 #12
Tak for hjolpen Martin, du har ret i at det er en stor opgave, du har hjulpet mig over det værste, jeg er meget taknemelig.

VbRookie
Avatar billede martin_moth Mester
16. september 2002 - 15:27 #13
Du kan jo lave en rutine, der arbejder på de enkelte delstrenge der står i dit array.

Der kan du søge efter tegn der står mellem et ">" og et "<" - det vil typisk være rent tekst, hvorimod tegn der står i mellem et "<" og et ">" typisk er karakterer der indgår i et HTML-tag. Men kik lidt i HTML-koden, og find de generelle regler der kan bruges til at bestemme og det er noget tekst du skal have med eller ej - helt og lykke ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester