Avatar billede pormic Nybegynder
10. september 2000 - 17:14 Der er 3 kommentarer og
2 løsninger

Funktion til filtrering af HTML-dokument

Jeg skal bruge en funktion, der kan udskrive alle links (<A href) i en sting. Stringen er et HTML-dukument hentet med Inet-konponenten.

Den skal dog kun udskrive de links, der slutter med et bestemt filnavn, feks. \".zip\" - Det kunne dog også være \".mp3\" eller \".mpg\"

I eksemplet vil jeg meget gerne have, at alle links blive udskrevet i en listbox. input til funktionen skal bare være en URL.

Jeg håber at nogen kan hjælpe. Det har drillet mig et godt stykke tid!.
Avatar billede winkill Nybegynder
10. september 2000 - 18:19 #1
Vers\'go.

ret = GetHrefs(EtHTMLdokument, \".zip\") \' returnerer eks.:
--START--
myfile1.zip
myfile2.zip
myfile3.zip
--SLUT--

Hvis du efterfølgende siger:
arrRet = Split(ret, vbCrLf)
så får du en array med alle hrefsne

Function GetHrefs(Source As String, Extention As String) As String
Dim Src As String, Ext As String
Dim nextPos As Long, EOHref As Long
Src = LCase(Source)
Ext = LCase(Extention)
nextPos = InStr(1, Src, \"<a href=\") + 2
While nextPos > 2
  EOHref = InStr(nextPos, Src, \"\"\"\") - nextPos
  If EOHref < 1 Then EOHref = InStr(nextPos, Src, \"\'\")
  If EOHRef > 0 Then GetHrefs = GetHrefs & Mid(Src, nextPos, EOHref) & vbCrLf
  nextPos = InStr(nextPos, Src, \"<a href=\") + 2
Wend
End Function
Avatar billede it-avisen.dk Nybegynder
10. september 2000 - 18:29 #2
det er ikke testet, men jeg kan se det andet ikke virker - så der er tryk på *S*

<%
Dim strhtml,intstart,intslut,strtype1,strtype2,strtype3,stroutput
\'Her understøttes 3 filtyper, flere kan tilføjes hvis det ønskes.
\'Husk der at tilføje ekstra OR sætninger længere nede!
strtype1=\".zip\"
strtype2=\".mpg\"
strtype3=\".mpeg\"
intstart=0
intslut=0

\'For i=1 til længden af html filen do:
for i=1 to len(strhtml)

\'Hvis to bogstaver er lig <a har vi fundet starten af et link!
if LCase(mid(strhtml,i,2))=\"<a\" then
strstart=i
end if

\'Hvis et bogstav er lig > og vi har fundet et start har vi fundet et
\'slut-tag til et link. Vi kan herefter se om det indeholder den forspurgte
\'filtype
if (LCase(mid(strhtml,i,2))=\">\" and intstart>0) then
if (instr(1,mid(strhtml,intstart,intslut-intstart),strtype1) or instr(1,mid(strhtml,intstart,intslut-intstart),strtype2) or instr(1,mid(strhtml,intstart,intslut-intstart),strtype3)) then
\'OK det er en af de 3 filer! Gem i output stringen!
stroutput=stroutput&mid(strhtml,intstart,intslut-intstart)
intstart=0
intslut=0
else
intstart=0
intslut=0
end if

NEXT
%>

- Husk at deltage i IT-Avisen store HP konkurrence med en 12 speed cd brænder som præmie.
Se mere på http://www.IT-Avisen.dk/konkurrence.asp
Avatar billede it-avisen.dk Nybegynder
10. september 2000 - 18:39 #3
woooops, der manglede et end if

<%
Dim strhtml,intstart,intslut,strtype1,strtype2,strtype3,stroutput
\'Her understøttes 3 filtyper, flere kan tilføjes hvis det ønskes.
\'Husk der at tilføje ekstra OR sætninger længere nede!
strtype1=\".zip\"
strtype2=\".mpg\"
strtype3=\".mpeg\"
intstart=0
intslut=0

\'For i=1 til længden af html filen do:
for i=1 to len(strhtml)

\'Hvis to bogstaver er lig <a har vi fundet starten af et link!
if LCase(mid(strhtml,i,2))=\"<a\" then
strstart=i
end if

\'Hvis et bogstav er lig > og vi har fundet et start har vi fundet et
\'slut-tag til et link. Vi kan herefter se om det indeholder den forspurgte
\'filtype
if (LCase(mid(strhtml,i,2))=\">\" and intstart>0) then
if (instr(1,mid(strhtml,intstart,intslut-intstart),strtype1) or instr(1,mid(strhtml,intstart,intslut-intstart),strtype2) or instr(1,mid(strhtml,intstart,intslut-intstart),strtype3)) then
\'OK det er en af de 3 filer! Gem i output stringen!
stroutput=stroutput&mid(strhtml,intstart,intslut-intstart)
intstart=0
intslut=0
else
intstart=0
intslut=0
end if
end if

NEXT
%>
Avatar billede winkill Nybegynder
10. september 2000 - 18:51 #4
Ok, en lille rettelse til funktionen


Function GetHrefs(Source As String, Extention As String) As String
Dim Src As String, Ext As String
Dim nextPos As Long, EOHref As Long
Src = LCase(Source)
Ext = LCase(Extention)
nextPos = InStr(1, Src, \"<a href=\") + 9
While nextPos > 2
  EOHref = InStr(nextPos, Src, \"\"\"\") - nextPos
  If EOHref < 1 Then EOHref = InStr(nextPos, Src, \"\'\")
  If EOHRef > 0 Then GetHrefs = GetHrefs & Mid(Src, nextPos, EOHref) & vbCrLf
  nextPos = InStr(nextPos + EOHRef, Src, \"<a href=\") + 2
Wend
End Function
Avatar billede pormic Nybegynder
10. september 2000 - 19:57 #5
Fedt nok, mange tak.

WinKill:
Jeg kunne ikke få funktionen til at virke. Jeg kunne godt få den til at udskrive, men det var noget \"mess\" - så desværre. Alligevel 100 point og mange tak for hjælpen!! :o)

it-avisen.dk:
Mange tak for det!! Det virker, selv om det ikke er en funktion. 300 point!
Også mange tak for en kanon nyhedstjeneste! Jeg læser jeres avis dagligt! Keep up the good work!
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