Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Position von Text/Links in einer HTML Datei finden (https://www.delphipraxis.net/99833-position-von-text-links-einer-html-datei-finden.html)

Hiele 18. Sep 2007 14:26


Position von Text/Links in einer HTML Datei finden
 
Moin zusammen,

ich such mich jetzt schon 2 Wochen bucklig nach einer Möglichkeit
den Text einer HTML Datei (Plaintext) nicht nur raus zu filtern,
sondern auch die Position der einzelnen Texte (Position des ersten Buchstabens im String).

Grund ist der, das ich für eine Webabfrage eine HTML Datei analysieren will/muss.

Dazu muss ich wissen an welcher Position ein Text/Link in der HTML Datei ist.

Ich krepel mir schon ein ab eine eigene while Schleife zu basteln, doch es gibt
einfach zu viele Ausnahmen.

Habt ihr vielleicht für mich einen kleinen Tipp wonach ich noch so suchen kann/einlesen sollte?

Habt Dank vorab :-D
Hiele

marabu 18. Sep 2007 17:45

Re: Position von Text/Links in einer HTML Datei finden
 
Hallo,

irgendwie habe ich das Gefühl, dass dieser Thread für dich interessant sein könnte: Website durchsuchen

Grüße vom marabu

Hiele 19. Sep 2007 09:04

Re: Position von Text/Links in einer HTML Datei finden
 
Hi marabu,

danke für deine erste Hilfe - wie schon öffters :oops: :-D

Diese Funktion nutze ich auch schon um die Links zu ermitteln.
Aber sie hilft mir nicht den Text mit Posion zu finden.

Vielleicht habe ich auch zu wenig Grundlagen vermittelt.

Also:

1. Es gibt einen LinuxServer von Gira für Hausautomatisierung
2. Dieser kann Webabfragen durchführen um z.B. Wetterdaten aus dem Internet für die
Visualisierung bereit zu halten.
3. Um so eine Webabfrage für den Server zu erstellen, muss der User kompliziert
den Quelltext einer HTML Datei durchfosten um die Stelle zu finden die der
Server ein eine Variable schreiben soll.
4. Grundlegend funktioniert es folgendermaßen:

a. Öffne Website
b. Lese soviele beliebige Anzahl an Daten (Zeichen) bis du folgende Zeichenkette findest (z.B. 'href="')
c. Dann speichere folgende Zeichen in Variable X
d. ... bis du folgende Zeichen findest (z.B. '">')

5. Um jetzt, wie im unternen Beispiel an Quelltext den zweiten Link zu finden (default.html)
muss der User bei der Abfrage darauf achten, dass er wie in b. beschrieben eine "Finde Vorgabe",
machte die bis zum Zweiten Link eindeutig ist. Hier: 'target="Hauptframe2" href="'

6. Ich möchte es dem User leicht machen und eine Webabfrage ohne Quelltext Durchsuchung zu erstellen.
Dafür soll eine Liste erstellt werden mit den Plaintexten und Links und Bilder, die dann per Drag&Drop
ausgesucht werden. Das Programm erstellt dann die Abfrage automatisch für den Server.
Damit dann die Abfrage erstellt werden kann, muss das Programm den Quelltest nach dem gewünschten
durchsuchen den Vor und Nachtext finden und sicherstellen, das der Vortext eindeutig und "unique" ist.

Nur Beispiel:
Delphi-Quellcode:
<BODY ID="index">
<CENTER>
<TABLE style="height:54px;" cellspacing="0" cellpadding="0" border="0">
<TR><TD valign="middle">

<TABLE style="width:720px;" cellspacing="0" cellpadding="0" border="0">
<TR>

<TD style="width:31px;">
<a target="Hauptframe1" href="default1.html" onmouseover="document.up.src=up1.src" onmouseout="document.up.src=up0.src" target="_parent">
[img]res/up.gif[/img]</a></TD>
<TD style="width:20px;" align="center">
[img]res/hdr_left.gif[/img]</TD>

<TD align="center" valign="middle" style="background:url('res/hdr_mid.gif');" class="title" nowrap="nowrap">

[url="default2.html"]hiele.de[/url]

</TD>
<TD style="width:20px;">
Hoffe ist jetzt etwas klarer.

Für eine Lösung biete ich eine Flasche guten Wein. (Zeigt meine Verzweifelung :? )

Gruß
Hiele

marabu 19. Sep 2007 09:38

Re: Position von Text/Links in einer HTML Datei finden
 
Hallo Hiele,

ich fürchte ich verstehe noch nicht ganz. Du möchtest eine Programmfunktion anbieten, mit der ein Benutzer eine beliebige selbstgeschriebene HTML-Seite einlesen kann, dann eine Liste der Links abgeboten bekommt und dort einen Link auswählen kann, der durch eine Abfrage bei einem Wetterdienst ersetzt wird?

Freundliche Grüße

Hiele 19. Sep 2007 10:53

Re: Position von Text/Links in einer HTML Datei finden
 
Hi marabu,

... fast. Normalerweise muss der Benutzer für eine Webabfrage (egal welche Seite er abfragen möchte)
z.B. wetter.com, den Quelltext per Hand durchforsten um die Abfrage wie oben beschrieben Punkt 4 a-d
zu erstellen.

Also wenn er z.B. die aktuelle Temperatur in eine Variable packen will, um sie auf der Visu anzuzeigen,
erstellt er eine Abfrage nach dem Schema:

Durchsuch den Quelltext von http://wetter.com/index.html bis zur Stellte <span class="WXHeadline">
dann speichere die Daten die folgen in der Variable bis zur Stelle </span>

Sprich das Programm muss den Quelltext von Anfang an durchsuchen, bis die gewünschte Information (hier die Tagestemp.)
gefunden wurde (Der Benutzer sagt ja meinem Programm, was er ermittel will, da das Programm vorher die Website analysiert
und dem Benutzer alle sinnvollen Information (Texte Bilder Links etc.) zusammenstellt)

Um diesen Wert/Text nun für den Server im Quelltext auffindbar zu machen, muss in der Abfrage der Teil vor und nach
der gewünschten Information in der Abfrage gespeichert sein.

Mein Programm bekommt also die Info: Ich will den Tempwert. Daraufhin sucht sich mein Programm den Teil vor und nach aus
dem Quelltext und stellt sicher das der Quelltext vor der gewünschten Info (Tempwert) nicht im oberen Teil
des Quelltext nochmal vorkommt. Sonst würde ja die Abfrage dort schon beginnen Daten in die Variable zu speichern.

Es ist also wichtig für mich, nicht nur den Plaintext einer HTML Datei heraus zufiltern (ist ja eher einfach),
sondern auch wo diese Texte sich im Quelltext befinden.

Klarer :?:


Gruß
Hiele

marabu 19. Sep 2007 11:50

Re: Position von Text/Links in einer HTML Datei finden
 
Hallo Hiele,

ich merke schon, dass du dich bemühst alles gut zu beschreiben, aber vielleicht bin ja ich heute nicht so gut drauf. Kann es sein, dass du einfach die aktuelle Temperatur von irgendeinem Wetterdienst auslesen möchtest?

Delphi-Quellcode:
const
  W_URL
    = 'http://www.accuweather.com/world-index-forecast.asp'
    + '?partner=accuweather&traveler=0&loccode=EUR|DE|GM007|LIMBURG';
  W_ID
    = 'quicklook_current_temps';

function CurrentTemperature(const urlWeather, tempId: string): string;
var
  doc: OleVariant;
begin
  doc := CoHtmlDocument.Create;
  doc.open;
  doc.Write(http.Get(urlWeather));
  doc.Close;
  Result := doc.all.item(tempId).innerText;
end;
Sorry, wenn ich heute etwas begriffsstutzig bin.

Freundliche Grüße

semike 19. Sep 2007 12:00

Re: Position von Text/Links in einer HTML Datei finden
 
Hallo Hiele,

ich vermute Du möchtest den HTML-Quelltext parsen. Hierzu gibt es eine Komponente die rasend schnell, jedoch nicht ganz trivial zu verstehen ist. Vielleicht hilft Dir diese weiter:

TDIHtmlParser

Ich verwende diesen für alle Arten von HTML und XML Parsing (und HTML Redesign).

Grüße
Michael

Hiele 19. Sep 2007 12:06

Re: Position von Text/Links in einer HTML Datei finden
 
Kein Problem - Immerhin nimmst du dir Zeit - Also dafür Danke vorab.

Es geht nicht im speziellen um Temperaturwerte.
Sondern vielmehr darum bestimmte Teile aus dem Quelltext ein eine Variable
zu bringen.

Wenn der Nutzer z.B. die Akt. Lottozahlen will, dann wird dem Giraserver eben
die gewünschte Website mitgeteilt, der sich dann den Quelltext der HTML Datei lädt
und diesen nach dem Abfrageschema ausliest.

Um so ein Abfrage-Schema zu erstellen, wird dem Server zuvor gesagt, welche
Website und wie er die gewünschte information findet.

Lade den Quelltext von www.xxx.de/xxx.html

Lese von Anfang des Datei bis du folgende Stelle findest (Also der Teil vor der
gewünschten Info)

Dann pack den gefundenen Text in die Variable X , bis zu der Stelle die im Quelltext
nach der gewünschten Info kommt.


Der eigentliche Parser ist im Giraserver. Um den für diese Abfrage zu konfigurenen
muss ein Script erstellt werden. Und dieses erstellen des Scriptes ist sehr aufwendig.

Meine Prog sollt einfach diese Scripterstellung vereinfachen. Nach dem Prinzip WYSIWYG.



@Michael: Ich habe mich zwar schon mit div. Parsern beschäftigt, doch keiner hilft mir weiter bzgl.
der Position, da ich einen Teil Quelltext vor und nach der gewünschten Info brauche

Werde mir aber den auch nochmal zugemühte führen - Gedankt für den Tip


Hiele

shmia 19. Sep 2007 12:37

Re: Position von Text/Links in einer HTML Datei finden
 
Du brauchst einen DOM (Document Object Modell) Parser.
Im DOM wird dir die gesamte Webseite als Baumstruktur aufbereitet.
Absolute Positionen in HTML spielen dann keine Rolle mehr.
Wenn du dann ein bestimmtes Element auswählen möchtest, kannst du entweder
eine ralativ starre (*) Technik anwenden und einfach merken, an welchen Kreuzungen
du im Baum abbiegen musst.
Beispiel: /2/5/3 - von der Wurzel in das 2. Child-Element (<body>) dann in das 5. Child-Element und dann in das 3. Child-Element.
*) selbst diese Technik dürfte besser als dein bisheriger Ansatz sein
Du kannst auch den gesamten Restbaum (ausgehend vom <body> Element) nach einem bestimmten Text durchsuchen.
Wird die Stelle gefunden, bist du irgendwo im Baum auf deinem gesuchten Element oder Attribut.
Es ist dann kein Problem, sich im Baum dann eine Ebene hoch und dann zum vorherigen oder nachfolgenden Childelement zu bewegen.

Oder es ist möglich mit XPATH Ausdrücken zu arbeiten. Das wäre dann der Königsweg.
Hier gibt es allerdings das Problem, dass HTML üblicherweise nicht so sauber geschachtet ist
wie das bei XML der Fall ist.
Wenn die Seite aber in XHTML geschrieben ist, dann ist es relativ einfach, beliebige Daten
sauber zu extrahieren. Ebenso kann dann die Seite leicht über die Baumstruktur verändert werden.

PS: du solltest dir den Internet Explorer Developer Toolbar installieren.
http://www.microsoft.com/downloads/t...e-2d5e1db91038
Er zeigt dir (unter anderem) die Baumstruktur und lässt selektierte Element blinken

Hiele 19. Sep 2007 12:56

Re: Position von Text/Links in einer HTML Datei finden
 
@shmia: Mit DOM hatte ich auch am Anfang gespielt, jedoch der Parser der im GiraServer (Hausautom.)
läuft setzt für eine Webabfrage ein Script vorraus, welches dem integrierten Parser sagt,
wo er welche Infos im Quelltext findet.
Wie oben geschrieben, will ich ein Tool bauen, welches solche Scripte erstellt.
Die meisten Benutzer kommen kaum zurecht, sich durch den Quelltext einer HTML Datei zu wuseln.
So ein Script kann kann schnell meherere Hundert Anweisungen enthalten, die normalerweise
per Hand ermittelt werde.

Hier entstehen auch die meisten Fehler. Da man eine bestimmte Stelle im Quelltext haben möchte
und dem Parser (Giraserver) sagt. Such die Stelle A(ein kurzer Auszug aus dem Quelltext)
und dann speichere die folgenden Zeichen (z.B. Lottozahlen o.ä.) bis zur Stellte B
(wieder ein kurzer Auszug aus dem Quelltext).
Wenn jetzt aber die A mehrfach im Quelltext vorkommt, wird der Parser die
erste Stelle nehmen an der er diesen Auszug A findet. Wenn nun dann nicht auch sicher B
folgt führt dies schon zu Fehlern.
Das Tool soll den Quelltext nach verwertbaren Infos durchsuchen (Texte/Bilder/Links) diese
dann auflisten. Der Benutzer kann nun wählen was er will. Danach erstellt das Tool den Script um sicher
zustellen, das es konform ist. Sucht also zur gewünschten Info die passenen Qulltextauschnitte Vor und Nach
der Info. (Also A/B) und dies so, dass der Quelltext A (vor Info) sicher so gewählt ist, das der Parser
der den Quelltext Zeichen für Zeichen durchgeht findet.

Gruß
Hiele

marabu 20. Sep 2007 07:58

Re: Position von Text/Links in einer HTML Datei finden
 
Hallo Hiele,

der Gira Home bzw. Facility Server liefert laut Hersteller Informationen über angeschlossene Installationen nicht nur als XHTML-Seite, sondern auch in einer Reihe von Formaten, die sich besser zur Weiterverarbeitung eignen, z.B. XML. Wäre das nicht ein Ansatz um an die Daten zu kommen?

Ansonsten verstehe ich das von dir beschriebene Problem inzwischen so: Dein Programm soll das Auslesen von bestimmten Daten einer HTML-Seite ermöglichen, ohne dass der Benutzer den HTML-Quelltext analysieren muss. Nicht so klar ist mir die Rolle des Text-Parsers auf dem Gira Server. Wieso wird der überhaupt gebraucht?

Ein eigenes Programm könnte die HTML-Seite im WebBrowser Control rendern und den gewünschten Text in vielen Fällen über einen Maus-Klick auswählen. Dazu muss über die IHTMLTxtRange-Schnittstelle das Element ermittelt werden, auf das mit der Maus geklickt wurde. Anschließend prüft man, ob das Element ein identifizierendes Attribut besitzt: name und id sind per se identifizierend, andere Attribute wie z.B. class müssen auf Eindeutigkeit geprüft werden. Diese Prüfung muss auf dem parentElement fortgesetzt werden, bis eine Eindeutigkeit vorliegt. Über den dabei aufgezeichneten Pfad kann man das Element dann später lokalisieren und den Text herausziehen.

Freundliche Grüße

Hiele 20. Sep 2007 09:12

Re: Position von Text/Links in einer HTML Datei finden
 
Moin marabu,

auf dem Server lassen sich keine Anwendungen installieren.
Auf dem PC wird mit einer Software ein System konfiguriert
welches dann komplett als "OS" auf den Server übertragen wird.

Dieses "OS" enthält eben auch die Möglichkeit das nicht nur
die Lichtsteuerung etc darüber läuft, sondern auch ein
VISU PC (z.B. Touchscreen in der Wand) angesteuert wird.

Diese zeigen dann Licht und Fensterzustände etc.
Alle Informationen werden in sogenannten KO (Kommunikationsobjekte)
oder iKO (Interne Kommunikationsobjekte) gespeichert und
verarbeitet.

So können Logiken erstellt und verarbeitet werden.
Beispiel: Wenn KO "1/2/3" (Das KO für Lichtwert aussen)
unter 5 Lux fällt aktiviere KO "2/3/4" (Das KO für
Automatikschalter/Bewegungsmelder), damit bei einer
festgestellten Bewegung das Licht nur angeht, wenn
es draussen dunkel ist.

Interne KO's nutzt der Server für diverse Informations
speicherung. Eben auch für Werte die man mit dem HTML Parser
aus Quelltexten (mit. o.g. Scripten) ermittelt um diese
dann auf den VISU Seiten (ähnlich eines Webbrowsers) darstellen
kann.

Der einer will sich die Formel1 Ergebnisse anzeigen lassen.
Der andere Wetterdaten oder das akt. Fernsehprogramm.

Also wird ein Script für die Durchsuchung einer Webseite geschrieben,
was diese Informationen dann in die iKO's schreibt, um sie
dann auf dem Display anzuzeigen. Einen Webbrowser hat der Server nicht.
Er kann auch nicht mit HTML direkt umgehen. Sondern nur beliebige
Dateien Parsen und gewünschte Werte für die Verarbeitung in iKO's schreiben.

Die Scripterstellung habe ich ja oben im groben beschrieben.
Damit der Parser eben ein Wert findet , muss ihm gesagt werden was vor
und nach dem gewünschten Wert/Text steht.
Das macht es eben unabdingbar, das der Benutzer alle sinnvollen Informationen
einer Page aufgelistet bekommt und für die Scripterstellung muss ich
eben die Position (z.B. Wert beginnt bei 155'zigtem Zeichen im String) wissen.
Nur dann kann ich die Quelltext nach den benötigten Zeichen durchsuchen.

Gruß
Hiele

Hiele 21. Sep 2007 09:48

Re: Position von Text/Links in einer HTML Datei finden
 
Moin zusammen,

erstmal habt Dank für eure zahlreiche Hilfe oben.

Ich habe jetzt selbst ein Parser gebastelt. Mit einer while Schleife.
Da der Quelltext ja in einem Richedit liegt.

NUR ist die Suche (das durchlaufen) extrem lahm. Gibt es eine schnellere Methode
einen "String" zur durchsuchen.
Mit der while Schleife analysiere ich Zeichen für Zeichen um mir die notwendigen Positionen
zu protokollieren.

Gruß
Hiele

Christian Seehase 21. Sep 2007 10:31

Re: Position von Text/Links in einer HTML Datei finden
 
Moin Hiele,

Zitat:

Zitat von Hiele
Mit der while Schleife analysiere ich Zeichen für Zeichen um mir die notwendigen Positionen
zu protokollieren.

Machst Du das etwa über die Eigenschaft TRichEdit.Lines.Text?

Wenn ja:
Übertrag' die mal vor der Schleife in eine Stringvariable, und arbeite mit der.

Wenn nein:
Zeig' mal wie Du es machst.

marabu 21. Sep 2007 10:33

Re: Position von Text/Links in einer HTML Datei finden
 
Hallo Hiele,

wie greifst du denn auf den Text des RichEdit zu? Kannst du Code zeigen?

Dein Problem habe ich inzwischen verstanden, habe auch einen Ansatz entwickelt und implementiert. Ich markiere den zu extrahierenden Text im Browser. Dann ersetze ich den ausgewählten Text im DOM durch eine interne Markierung, wobei ich den vorherigen Inhalt zwischenspeichere. Jetzt kann ich die Stelle im Markup ermitteln, an der die Markierung steht. Ab hier ist es eine Frage des Ehrgeizes, ob ich das vollständige HTML bis zur gefundenen Stelle als Prefix nehme oder den Riesen-String soweit verkleinere, dass er gerade noch eindeutig ist.

Sagen wir mal so: Es gibt Testfälle, die erfolgreich verarbeitet werden, aber zufrieden bin ich noch nicht. Wenn du mit deinem Textparser glücklich bist, dann stampfe ich das wieder ein, denn momentan bin ich arg im Stress, was meine kommerziellen Projekte betrifft.

Freundliche Grüße

Hiele 21. Sep 2007 10:52

Re: Position von Text/Links in einer HTML Datei finden
 
Hi marabu,

das was du da machst ist genau, was ich wollte. Der Textparser ist lediglich eine Notlösung und dauert furchtbar lange.
Aber Arbeit geht vor - lass dich also von mir (und meinen Vorstellungen) nicht ablenken.

Mein Delphiwissen ist dem kaum würdig :oops: (Naja vieleicht ein bischen)

Wäre aber schön, wenn du dran bleibst, ist bei mir nicht allzu Zeitkritisch.

Aber für ein Tip um die Prozedur zu beschleunigen wäre ich dankbar.
Mit doc.body.innerHTML habe ich es auch schon versucht. Würde ein virtueller Richedit das beschleunigen?

Gruß
Hiele

Hier der Parser:

Delphi-Quellcode:
procedure TForm4.sbanalyseClick(Sender: TObject);
var
    i2                   : longint;   // Für verschachtelte Tags
    s, stag             : string;    // s=Text/Link/Bild stag=Was für ein Tag
    tagclose,scriptclose : boolean;   // Verschachtelter Tag geschlossen / Script geschlossen
    listitem            : TListItem; // Ergebnissliste (Text/Link/Bild mit Position)

begin
  // Quelltextparser

  progbar.Max := length(quelltext1.Text); //Status des Parsers
  progbar.Visible := true;                

  liste.Clear;                           // Ergebnissliste vorbereiten
  liste.Items.BeginUpdate;

  posqt := 0;                           // Position im Quelltext
  s := '';
  i2 := 0;
  stag := '';
  tagclose := false;
  scriptclose := false;
  statusbar.Panels[0].Text := 'Analysiere Page ...';

  while posqt < length(quelltext1.text) do
  begin
    if quelltext1.text[posqt] = '<' then
    begin
      s := '';
      inc(posqt);
      application.ProcessMessages;
      progbar.Position := posqt;

      // IST SCRIPT
      if lowercase(copy(quelltext1.text,posqt,6)) = 'script' then
      begin
        while not(scriptclose) and (posqt<length(quelltext1.text)) do
        begin
          if lowercase(copy(quelltext1.text,posqt,5)) <> '</scr' then inc(posqt) else
          scriptclose := true;
          application.ProcessMessages;
        end;
      end else
      begin

        // IST Normaler Tags
        stag := '';
        stag := stag + quelltext1.text[posqt];
        while not(tagclose) and (posqt<length(quelltext1.text)) do
        begin
          if (quelltext1.text[posqt] = '>') and (i2 = 0) then tagclose := true;
          if (quelltext1.text[posqt] = '<') then inc(i2);
          if (i2>0) and (quelltext1.text[posqt]='>') then dec(i2);

          // IST LINK
          if (lowercase(copy(quelltext1.text,posqt,6)) = 'href="') and mlinks.checked then  // Suche nach Links
          begin
            // LINK FINDEN
            inc(posqt,6);
            application.ProcessMessages;
            while quelltext1.text[posqt] <> '"' do
            begin
              s := s + quelltext1.text[posqt];
              inc(posqt);
              progbar.Position := posqt;
            end;

            // LINK HINZUFÜGEN
            listitem := liste.Items.Add;
            listitem.Caption := s;
            listitem.ImageIndex := 10;
            listitem.StateIndex := 10;
            listitem.SubItems.Add(inttostr(posqt));
            s := '';
          end;

          // IST BILD
          if (lowercase(copy(quelltext1.text,posqt,5)) = 'src="') and mbilder.checked then  // Suche nach Bildern
          begin
            // BILD FINDEN
            inc(posqt,5);
            while quelltext1.text[posqt] <> '"' do
            begin
              s := s + quelltext1.text[posqt];
              inc(posqt);
              progbar.Position := posqt;
            end;

            // BILD HINZUFÜGEN
            listitem := liste.Items.Add;
            listitem.Caption := s;
            listitem.ImageIndex := 11;
            listitem.StateIndex := 11;
            listitem.SubItems.Add(inttostr(posqt));
            s := '';
          end;
          stag := stag + quelltext1.text[posqt];
          inc(posqt);
          progbar.Position := posqt;
          application.ProcessMessages;
        end;
        i2 := 0;
        tagclose := false;
        scriptclose := false;
      end;
    end else
    begin
      if mtext.checked then // MIT TEXT (Suche nach Texten)
      begin
        while (quelltext1.text[posqt] <> '<') and (posqt<length(quelltext1.text)) do
        begin
          s := s + quelltext1.text[posqt];
          inc(posqt);
          progbar.Position := posqt;
          application.ProcessMessages;
        end;
        if length(s)>0 then
        if (s[1] in ['a'..'z','A'..'Z','0'..'9']) and (copy(stag,1,2)<>'<!') then
        begin
          listitem := liste.Items.Add;
          listitem.Caption := s;
          listitem.ImageIndex := 8;
          listitem.StateIndex := 8;
          listitem.SubItems.Add(inttostr(posqt));
          stag := '';
        end;
      end else inc(posqt);
    end;
  end;
  statusbar.Panels[0].Text := 'Fertig!';
  progbar.Visible := false;
  liste.Items.EndUpdate;
end;

Christian Seehase 21. Sep 2007 11:12

Re: Position von Text/Links in einer HTML Datei finden
 
Moin Hiele,

wie ich schon vermutet hatte ;-)

Probier's mal so:


Delphi-Quellcode:
var
  // Deine sonstigen Variablen
  sContent : string;

begin
  sContent := quelltext1.Text;
  // Der Rest Deiner Routine
  // Hierbei muss dann aber quelltext1.Text durch sContent ausgetauscht werden
end;
Der Performanceverlust rührt daher, dass bei jedem Zugriff auf Text diese Eigenschaft aus den Lines zusammengesetzt wird.

Hiele 21. Sep 2007 11:26

Re: Position von Text/Links in einer HTML Datei finden
 
Hi Christian,

ist deutlich zu merken, Danke.
Zwar dauert diese Lösung bei 80kb Seiten wie Wetter.com zwar immernoch lange,
doch es passiert erkennbar was.

Bekomme ich bei 80.000 Zeichen im string keine Probleme?

Gruß
Hiele

Christian Seehase 21. Sep 2007 11:31

Re: Position von Text/Links in einer HTML Datei finden
 
Moin Hiele,

Zitat:

Zitat von Hiele
Bekomme ich bei 80.000 Zeichen im string keine Probleme?

ein String kann bis zu 2 GB Daten enthalten.
(abzüglich dessen, was der Rest des Programmes benötigt)

Mushroomfreak07 18. Jan 2008 22:44

Re: Position von Text/Links in einer HTML Datei finden
 
guten abend
ich suche für ein Ähnliches Problem eine Lösung und bin bisher noch nicht fündig geworden...
ich hänge das einfach mal an muss ja nicht unbedingt das Forum zumüllen ;-)

ich habe im twebbrowser eine Seite geöffenet.. im Quelltext der Seite soll nach einer bestimmten Zeichenkombination gesucht werden

nehmen wir an '-a-'
links von der Zeichenkombination stehen noch buchstaben die wichtig sind und rechts ebenfalls ich möchte das ganze in einen string packen... nach links und nach rechts wird der wichtige Teil jeweils durch ein " abgegrenzt
es handelt sich um eine emailadresse....
der schlüssel ist also die oben genannte Zeichenkombination


achso die Zeciehnkombi kommt 2 mal in der Webseite vor! die für mich wichtige ist die 2te ...


Wäre super dankbar für einen Lösungsvorschlag

vielen Dank

Schlönen abend noch

omata 18. Jan 2008 23:22

Re: Position von Text/Links in einer HTML Datei finden
 
Hallo, vielleicht so...

Delphi-Quellcode:
procedure GetEMails(Html:string; Mails:TStrings);
var RegExpr:TRegExpr;
begin
  RegExpr:=TRegExpr.Create;
  try
    RegExpr.ModifierG:=false;
    RegExpr.Expression:='"(.+)@(.+)"';
    if RegExpr.Exec(Html) then begin
      repeat
        Mails.Append(RegExpr.Match[1] + '@' + RegExpr.Match[2]);
      until not RegExpr.ExecNext;
    end;
  finally
    RegExpr.Free;
  end;
end;
Aufruf...
Delphi-Quellcode:
var EMailList:TStringList;
    i:integer;
    EMail:string;
begin
  EMailList:=TStringList.Create;
  try
    GetEMails('<a href="ich@du.de">Hallo<a "mailto:aaa@bbb.ccc" style="">', EMailList);
    for i:=1 to EMailList.Count do begin
      EMail:=EMailList[i-1];
    end;
  finally
    EMailList.free;
  end;
end;
Ergebnis:
Code:
[email]ich@du.de[/email]
mailto:aaa@bbb.ccc
RegExpr

Gruss
Thorsten

Mushroomfreak07 18. Jan 2008 23:47

Re: Position von Text/Links in einer HTML Datei finden
 
ok vllt haben wir aneinander vorbei geredet ;-)
also ich habe nen elend lange Quelltext welcher sich immer wieder ändert!
das einzige was in jedem Quelltest immer wieder vorkommt ist die Zeichenkombination ( das zeichen welches das @ ersetzt / codiert)


das ist auf jeder seite identisch darüber kann ich die Mail addy finden...

die Mail Adresse ist logischer Weise auch auf jeder aufgerufenen Seite anders.
ich suche den Quelltext nach dem Codierten @ ab , angenommen es sieht so aus :'++at++'
suche dann ab dem ersten gefundenen weiter bis ich zum 2ten gefundenen gelange, da erste ist nicht das gesuchte , gehe vom 2ten nach links bis der Anfang der Mail addy erreicht ist ( wirds durch ein " beendet, das gleich von codierten @ nach rechts. "ich++at++web.de"
Das ganze was sich um das codierte @ befindete packe ich in einen String- dann komme ich wieder alleine klar

;-)

ich hoffe es ist verständlich erklärt ;-)

vielen dank aber schonmal für die mühen

omata 18. Jan 2008 23:50

Re: Position von Text/Links in einer HTML Datei finden
 
Ja, für sowas sind Reguläre-Ausdrücke doch perfekt geeignet.

Das was du dir vorstellst macht der vorgestellte Code doch. Hast du das mal ausprobiert?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 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