Ich hab es nun endlich hinbekommen das es läuft, ist zwar vielleicht nicht die schnellste Methode aber es läuft. Hier mal der Code falls es jemanden interessiert.
Falls noch jemand eine schneller Möglichkeit einfällt kann er es ja mal posten.
Danke @ Mystic für den Tipp mit TStringStream
Delphi-Quellcode:
var
dateiname :string;
puffer :TStringStream;
my_filestream :TFileStream;
puffer2 :string;
start :integer;
ende :integer;
begin
if OpenDialog1.Execute then
begin
dateiname := OpenDialog1.FileName;
try
my_filestream := TFileStream.Create(dateiname, fmOpenread); //Datei in FileStream laden
puffer := TStringStream.Create('');
puffer.CopyFrom(my_filestream, my_filestream.Size); //Daten aus FileStream in StringStream kopieren
my_filestream.Free;
puffer.Seek(0, soFromBeginning); //Zeiger auf den Anfang setzen
puffer2 := puffer.ReadString(puffer.Size); //StringStream in String laden
while (pos('<table width=519>', Puffer2) > 0) do //Parsen
begin
start := pos('<table width=519>', Puffer2);
ende := pos('</table>', Puffer2) + 7;
while ende < start do
begin
delete(Puffer2, 1, ende);
start := pos('<table width=519>', Puffer2);
ende := pos('</table>', Puffer2) + 7;
end;
Memo1.Lines.Add(copy(Puffer2, start, ende - start + 1));
delete(Puffer2, 1, ende);
end;
finally
puffer.Free;
my_filestream.Free;
end;
end;
end;
EDIT: habe wie einen Beitrag weiter unten empfohlener Weise aus dem "try..except..end"-Block einen "try..finally..end"-Block gemacht. Ausserdem hab ich noch einen kleinen Fehler gemerkt und ausgebessert (die Endposition kann vor der Startposition liegen). Ist jetzt denke ich mal mit der zusätzlichen while ... do behoben.