Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Text Parsen / Durchsuchen (https://www.delphipraxis.net/142321-text-parsen-durchsuchen.html)

Detrox 26. Okt 2009 09:41


Text Parsen / Durchsuchen
 
Hallo,

Ich habe ein Problem und würde mich über Hilfe sehr freuen.

In einem memo steht Quelltext folgendes Wiederholt sich :

XML-Code:
<td><span class="dodo">wert1</span></td>
mehr Quelltext
<td><span class="dodo">wert2</span></td>
mehr Quelltext
<td><span class="dodo">wert3</span></td>
usw...

Ich möchte jeweils den Wert rausfiltern. Wie kann ich vorgehen?

LG
Detrox

Bernhard Geyer 26. Okt 2009 09:44

Re: Text Parsen / Durchsuchen
 
Lade es in TWebBrowser und gehe über das HTML-Document (MSHTML.pas) und lass dir das Table-Objekt (IHTMLTable) geben.
Doku gibts bei MS in der MSDN

DeddyH 26. Okt 2009 09:46

Re: Text Parsen / Durchsuchen
 
Hallo und Willkommen in der DP :dp:,

Du könntest mit PosEx nach dem wiederkehrenden Teil suchen ("<td><span class="dodo">"). Dann ab der Fundstelle (plus Stringlänge) bis zur Position von "</span>" kopieren, damit dürftest Du Deinen Wert haben. Eine andere Möglichkeit wären evtl. reguläre Ausdrücke, aber damit kenne ich mich nicht aus.

Detrox 26. Okt 2009 09:47

Re: Text Parsen / Durchsuchen
 
Den Webbrowser wollte ich eigentlich vermeiden.
ich lade die html Datei oer idhttp von den indy Komponenten.


DeddyH

Hi :)

könntest du einen Codeansatz posten mit Beschreibug würde mich freuen
LG
Detrox

Detrox 26. Okt 2009 09:50

Re: Text Parsen / Durchsuchen
 
Wenn er einen Wert hat soll er ja weiter runter rutschen und den nächsten Suchen :)

DeddyH 26. Okt 2009 09:51

Re: Text Parsen / Durchsuchen
 
Deshalb ja PosEx ;)

Bernhard Geyer 26. Okt 2009 09:59

Re: Text Parsen / Durchsuchen
 
Zitat:

Zitat von DeddyH
Du könntest mit PosEx nach dem wiederkehrenden Teil suchen ("<td><span class="dodo">"). Dann ab der Fundstelle (plus Stringlänge) bis zur Position von "</span>" kopieren, damit dürftest Du Deinen Wert haben. Eine andere Möglichkeit wären evtl. reguläre Ausdrücke, aber damit kenne ich mich nicht aus.

Dann aber hoffen das keine Sonderzeichen vorhanden sind (Stichwort Codierung nach UTF8/ISO/Named Entities/...) und das nicht irgendwo anders (z.B. als Kommentar) entsprechende Elemente <td>-Elemente vorhanden sind.

Detrox 26. Okt 2009 10:08

Re: Text Parsen / Durchsuchen
 
Ich hab jetzt mal im Forum gesucht, ich bekomme es als Anfänger ja hin das erste zu finden und dazwischen auszugeben aber das er danach mit den andern weitermach bekomm ich nich hin, hier mal mein Code:

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var StringList:TStringList;
    posi:integer;
    s:string;
begin
  StringList := TStringList.Create;
  try
    StringList.Text := Memo1.text ;
    s:=StringList.Text;
    delete(s, 1, pos('<td><span class="dodo">', s) + length('<td><span class="dodo">') - 1);
    Memo2.Text := copy(s, 1, pos('</span></td>', s) - 1);
  finally
    StringList.free;

  end;
LG
Detrox

DeddyH 26. Okt 2009 10:21

Re: Text Parsen / Durchsuchen
 
Und so?
Delphi-Quellcode:
function FilterText(const Source, TagStart, TagEnd: string): string;
var StartPos, EndPos: integer;
    Buffer: TStringList;
begin
  Buffer := TStringList.Create;
  try
    StartPos := PosEx(TagStart,Source);
    while StartPos > 0 do
      begin
        inc(StartPos,Length(TagStart));
        EndPos := PosEx(TagEnd,Source,StartPos);
        Buffer.Add(Copy(Source,StartPos,EndPos - StartPos));
        StartPos := PosEx(TagStart,Source,EndPos + Length(TagEnd));
      end;
    Result := Buffer.Text;
  finally
    Buffer.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text := FilterText(Memo1.Text,'<span class="dodo">','</span>');
end;
Aber wie Bernhard schon meinte, Kommentare und dergleichen werden dabei nicht berücksichtigt.

Detrox 26. Okt 2009 10:39

Re: Text Parsen / Durchsuchen
 
Toll...


Riesen Dank das funktioniert Super, wenn ich jetzt noch jeden Wert in einer Listbox hätte wäre das die Krönung, aber ich möchte ja nicht unverschämt werden :stupid:

LG
Detrox

DeddyH 26. Okt 2009 10:44

Re: Text Parsen / Durchsuchen
 
Alle Werte in einer ListBox oder eine ListBox pro Wert? Ersteres ist nicht so schwer.

Detrox 26. Okt 2009 10:45

Re: Text Parsen / Durchsuchen
 
Ja Pro wert .. hab auch gerade überlegt das würde so nicht gehn weil wir ja alles aufeinmal ausgeben :roll:

LG
Detrox

Chris.R 26. Okt 2009 10:46

Re: Text Parsen / Durchsuchen
 
Hallo,

alle Werte in eine Listbox kriegst du so:

Delphi-Quellcode:
ListBox1.Items.Text := FilterText(Memo1.Text,'<span class="dodo">','</span>');
[edit] War wohl doch nicht das was du wolltest

Ciao Chris

Detrox 26. Okt 2009 11:10

Re: Text Parsen / Durchsuchen
 
Ich hab eine Idee, kann ich nicht Zeile für Zeile des Memos in die Listbox übertragen?

DeddyH 26. Okt 2009 11:15

Re: Text Parsen / Durchsuchen
 
Was willst Du denn erreichen? Alle Funde in einer Listbox darstellen? Dann hat Chris doch bereits gezeigt, wie das geht.

Detrox 26. Okt 2009 11:19

Re: Text Parsen / Durchsuchen
 
Nein das funktioniert nicht, da wird garnix angezeigt, jedes Listbox Item soll den Wert haben also Listboxitem1 : wert1 usw...

DeddyH 26. Okt 2009 11:32

Re: Text Parsen / Durchsuchen
 
Dann musst Du etwas falsch machen, bei mir funktioniert das einwandfrei.

toms 4. Nov 2009 04:12

Re: Text Parsen / Durchsuchen
 
Zitat:

Zitat von Detrox
Nein das funktioniert nicht, da wird garnix angezeigt, jedes Listbox Item soll den Wert haben also Listboxitem1 : wert1 usw...

Der Code von Chris R. macht ja genau das.

alzaimar 4. Nov 2009 05:56

Re: Text Parsen / Durchsuchen
 
XML geht nicht? :gruebel: (IXMLDocument und so?)


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