HtmlTagFilter

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

HtmlTagFilter

Beitrag 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, "|") 
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: HtmlTagFilter

Beitrag 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:
Zuletzt geändert von STARGÅTE am 17.04.2010 12:07, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: HtmlTagFilter

Beitrag 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:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: HtmlTagFilter

Beitrag von STARGÅTE »

:oops: naja ich runde gerne auf gerade Zahlen ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten