AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

große Textdatei einlesen und filtern

Ein Thema von Cakotay · begonnen am 6. Aug 2005 · letzter Beitrag vom 8. Aug 2005
 
Cakotay

Registriert seit: 6. Aug 2005
5 Beiträge
 
#7

Re: große Textdatei einlesen und filtern

  Alt 8. Aug 2005, 14:43
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.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:18 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