Seite 1 von 1

HtmlTagFilter

Verfasst: 17.04.2010 09:19
von rolaf
Da ich es gerade selbst zum "ausklabüstern" einer Webseite gebraucht habe hier ein Funktionuckelchen: :mrgreen:

Code: Alles auswählen

Procedure.s TagFilter(Html.s, Trennzeichen.s)

  Text.s = ""
  Teil.s = ""
  Schneiden.l = 1

  For A = 1 To Len(Html) 
    Teil = Mid(Html, A, 1) 
    If Teil = "<"
      Schneiden = 0
    EndIf 
    If Schneiden = 1
      Text + Teil
    EndIf 
    If Schneiden = 0 And Teil = ">"
      Schneiden = 1
      If Right(Text, 1) <> Trennzeichen
        Text + Trennzeichen
      EndIf
    EndIf    
  Next A
  
  ProcedureReturn Text

EndProcedure 

Html.s = "<html><head><title>Text 1</title></head><body>Text 2<br><b>Text 3</b></body></html>" 

Debug Html
Debug TagFilter(Html, "|") 

Re: HtmlTagFilter

Verfasst: 17.04.2010 11:38
von STARGÅTE
Ich habe mich mal um eine optimierung bemüht, damit man es auch für längere Sachen nutzen kann:

Code: Alles auswählen

Procedure.s TagFilter2(*Char.Character, Trennzeichen.s)
 
  Protected Text.s = ""
  Protected *Position = *Char

  While *Char\c
    If *Char\c = '<'
      Text + PeekS(*Position, (*Char-*Position)/SizeOf(Character))
      *Position = #Null
    EndIf 
    If Not *Position And *Char\c = '>'
      *Position = *Char + SizeOf(Character)
      If Right(Text, 1) <> Trennzeichen
        Text + Trennzeichen
      EndIf
    EndIf 
    *Char + SizeOf(Character)   
  Wend
  
  ProcedureReturn Text

EndProcedure 
Aufpassen nun nicht den String übergeben sonden den Pointer !

Bei einem Vergleich:

Code: Alles auswählen

Html.s = "<html><head><title>Text 1</title></head><body>Text 2<br><b>Text 3</b></body></html>" 


#Size = 100000


Time = ElapsedMilliseconds()
For n = 1 To #Size
 TagFilter(Html, "|") 
Next
Time1 = ElapsedMilliseconds()-Time



Time = ElapsedMilliseconds()
For n = 1 To #Size
 TagFilter2(@Html, "|") 
Next
Time2 = ElapsedMilliseconds()-Time


MessageRequester("Testergebnis", "Time1: "+Str(Time1)+Chr(10)+"Time2: "+Str(Time2))
---------------------------
Testergebnis
---------------------------
Time1: 2985
Time2: 594
---------------------------
OK
---------------------------
Um das 6-Fache beschleunigt.

EDIT: ääähhh 5-Fache :lol:

Re: HtmlTagFilter

Verfasst: 17.04.2010 12:01
von rolaf
STARGÅTE hat geschrieben:
---------------------------
Testergebnis
---------------------------
Time1: 2985
Time2: 594
---------------------------
OK
---------------------------
Um das 6-Fache beschleunigt.
Ist zwar "nur" rund das 5-fache :wink: , aber dennoch :allright:

Re: HtmlTagFilter

Verfasst: 17.04.2010 12:06
von STARGÅTE
:oops: naja ich runde gerne auf gerade Zahlen ^^