Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz