![]() |
Wie am effektivsten aus diesen HTML Code Text parsen ?
Ich möchte aus einer HTML-Code Tabelle (eine Topliste) die Daten extrahieren in ein Format das ich dann auch gut weiterverarbeiten kann.
Der HTML-Code sieht folgendermaßen aus: Zitat:
Extrahiert werden sollen die werte in Zeile: 2,7,8 und in 9 die Zahl hinter javascript:get(' Die Befehle Pos, delete usw sind mir bekannt, aber ich frage mich ob es etwas effektiveres gibt als umständlich mit pos/delete zu arbeiten. Das Ausgabeformat könnte ein komma getrennter String array werden, so das ich dann auf die einzelnen werte zugreifen kann. Oder hat jemand eine bessere idee? Wäre nett wenn jemand helfen könnte. Danke. |
Re: Wie am effektivsten aus diesen HTML Code Text parsen ?
Hi
Delete benötigst Du nicht, nur eine (schnelle) PosEx-Funktion. Die ist in aktuelleren Versionen vorhanden und erweitert die POS-Funktion um die Angabe des Startindexes, ab dem gesucht werden soll. Prinzipiell gehst Du so vor: 1. Suche "<DIV class=c1>" ab Position P und extrahiere alles nach dem Suchstring bis zum ersten '<'. Setze P auf diese Position. Damit hast Du das erste Datum gefunden und extrahiert. 2. Suche "<DIV class=c4>" ab Position P und extrahiere alles nach dem Suchstring bis zum ersten '<'. Setze P auf diese Position. Damit hast Du das zweite Datum gefunden und extrahiert. 3.... 4.... 5. Gehe zu 1. Das wiederholst du, bis die Suche erfolglos war. Fertig. |
Re: Wie am effektivsten aus diesen HTML Code Text parsen ?
ok, danke. Also meine Routine um einen wert zu extrahieren sieht nun so aus:
Delphi-Quellcode:
Das memo geladen wird usw entfällt später natürlich ist nur zum offline testen.
var
string1 : String; pos1,pos2 : Integer; Platz : String; begin memo10.lines.LoadFromFile('.\bearbeiten1.txt'); string1 := lowercase(memo10.text); pos1 := posex('<div id=topcontainer>',string1,1); delete(string1,1,pos1); pos1 := posex('<div class=c1>',string1,1); pos2 := posex('</div>',string1,pos1); platz := trim(copy(string1,pos1+14,(pos2-pos1)-14)); end; Ich finde zuerst den begin der eigentlichen topliste und lösche alles davor damit nicht fundstellen vorher schon vorkommen. Die nächsten 2 Zeilen müsste ich dann für jeden wert den ich extrahieren will wiederholen. Ist doch dann so ok oder ? |
Re: Wie am effektivsten aus diesen HTML Code Text parsen ?
Zitat:
![]() |
Re: Wie am effektivsten aus diesen HTML Code Text parsen ?
Bin kein Profi, aber vielleicht geht es mittels Regex einfacher?
Delphi-Quellcode:
Ergebnis für deinen Quote in #1:
with TPerlRegEx.Create(nil) do
try RegEx := '(?<=>)\d+(?=<)|(?<=javascript:get\('')\d+(?='')'; Subject := {Source}; if Match then repeat AStringList.Add(MatchedExpression); until not MatchAgain; finally Free; end; Zitat:
|
Re: Wie am effektivsten aus diesen HTML Code Text parsen ?
Zum Parsen von HTML mit RegEx gibt es ziemlich negative Meinungen:
![]() |
Re: Wie am effektivsten aus diesen HTML Code Text parsen ?
Anhand des Titels würde ich Regex ausschließen. Denn effektiv hat bei mir etwas mit Geschwindigkeit zu tun und da ist die individuelle Lösung klar im Vorteil.
|
Re: Wie am effektivsten aus diesen HTML Code Text parsen ?
Zitat:
(Also für mich ist effektiv = "wird die Aufgabe erledigt?" und effizient="wird sie erledigt, und wieviel kostet das?") Aber du bist nicht allein: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz