Ich hab Just4Fun einen Parser programmiert. Memo1 enthält den ganzen
Html-Code, es wird die erste gefundene Tabelle bearbeitet, Ergebnis steht im Memo2. Zwei Probleme gibt es noch: es wird nur nach kleingeschriebenen Tags gesucht, hier muß es noch so umgeschrieben werden, dass Groß-/Kleinschriebung nicht beachtet wird. Dann müssen noch die Umlaute (München für München) konvertiert werden.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
function MyPos(Substr: string; S: string): Integer;
begin
Result := Pos(Substr, S);
end;
function ExtractTagArea(var HtmlCode: String; Tag: String): String;
var
p: Integer;
begin
Result := HtmlCode;
p := MyPos('<' + Tag, Result);
if p > 0 then Delete(Result, 1, p);
p := MyPos('>', Result);
if p > 0 then Delete(Result, 1, p);
p := MyPos('</' + Tag + '>', Result);
if p > 0 then
begin
HtmlCode := Copy(Result, p + Length('</' + Tag + '>'), MaxInt);
Delete(Result, p, MaxInt);
end;
end;
function TrLineToCsvLine(TrLine, Tag: String): String;
var
sTd: String;
begin
Result := '';
while MyPos('<' + Tag, TrLine) > 0 do
begin
sTd := ExtractTagArea(TrLine, Tag);
Result := Result + sTd;
if MyPos('<' + Tag, TrLine) > 0 then Result := Result + #9;
end;
end;
var
sTmp, sTabelle, sTr: String;
sl: TStringList;
s: String;
begin
sl := TStringList.Create;
try
sTmp := Memo1.Lines.Text;
sTabelle := ExtractTagArea(sTmp, 'table');
while MyPos('<tr', sTabelle) > 0 do
begin
sTr := ExtractTagArea(sTabelle, 'tr');
s := TrLineToCsvLine(sTr, 'th');
if Length(s) = 0 then
s := TrLineToCsvLine(sTr, 'td');
sl.Add(s);
end;
Memo2.Lines.Text := sl.Text;
finally
sl.Free;
end;
end;