Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi text in richedit einlesen (https://www.delphipraxis.net/122286-text-richedit-einlesen.html)

tadlanra 13. Okt 2008 11:10


text in richedit einlesen
 
Hallo zusammen, ich lese einen Text aus einer Datei (.txt) in ein RichEdit ein. hierzu verwende ich:

RichEdit1.Lines.LoadFromFile(...

jetzt durchsuche ich den text im RichEdit. Mein Problem ist, dass die Datei soooo riesig ist, dass mein suchvorgang mehr als 5 Minuten benötigt. Da ich nur ein Teil der Datei benötige (und der suchvorgang dann auch nichtmehr so lange dauert) wollt ich fragen wie ich lediglich einen Abschnit aus meiner Textdatei einlese.

text ist zB:
hallo dies ist ein beispieltext

und ich will jetzt nur von "dies" bis "ein" alles einlesen :)

nahpets 13. Okt 2008 11:25

Re: text in richedit einlesen
 
Hallo,

Vorschlag:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
          f : TextFile;
          s : String;
begin
  AssignFile(f,'meineriesengrossetextdatei.txt');
  Reset(f);
  Repeat
    ReadLn(f,s);
  Until (EoF(f)) or (s = 'start');
  ReadLn(f,s);
  Repeat
    RichEdit1.Lines.Add(s);
    ReadLn(f,s);
  Until (EoF(f)) or (s = 'ende');
  CloseFile(f);
end;
Hierbei gehe ich davon aus, dass der Beginn des Textteiles, in dem gesucht werden soll, klar erkennbar ist (hier durch die Zeichenfolge "start") und dass das Ende des Textteiles, in dem gesucht werden soll, ebenfalls klar erkennbar ist (hier durch die Zeichenfolge "ende").
Abhängig davon, was Du suchen musst und wie Du mit den Ergebnissen umgehen muss, könntest Du die Suche aber auch in der zweiten Repeatschleife durchführen.
Delphi-Quellcode:
Repeat
  RichEdit1.Lines.Add(s);
  ReadLn(f,s);
  If Pos('Suchmichmal',s) > 0 Then RichEdit1.Lines.Add(s); // nur ein Beispiel
Until (EoF(f)) or (s = 'ende');

tadlanra 13. Okt 2008 12:26

Re: text in richedit einlesen
 
hm hab mal ausgetestet aber funktioniert nich. hab mal mit einem kurzen textstück probiert und zwei worte als start und ende definiert, aber er gibt nur leer in das richedit ein. was macht denn die funktion reset(f)? und EoF ist ja end of file ist es dann schlecht falls zeilenumbrüche drin sind oder reagiert EoF nicht da drauf

DeddyH 13. Okt 2008 12:49

Re: text in richedit einlesen
 
Noch ein Vorschlag (ungetestet):
Delphi-Quellcode:
procedure ReadFromTil(const sl: TStrings; const sStart, sEnd, sFile: string);
var f: TextFile;
    s: string;
begin
  if not FileExists(sFile) then
    raise Exception.CreateFmt('Datei "%s" existiert nicht.',[sFile])
  else
    begin
      sl.BeginUpdate;
      try
        sl.Clear;
        AssignFile(f,sFile);
        Reset(f);
        while not EOF(f) and (Pos(sStart,s) = 0) do
          readln(f,s);
        while not EOF(f) and (Pos(sEnd,s) = 0) do
          begin
            readln(f,s);
            sl.Add(s);
          end;
        CloseFile(f);
      finally
        sl.EndUpdate;
      end;
    end;
end;

tadlanra 13. Okt 2008 15:09

Re: text in richedit einlesen
 
Hm irgendwie will er nicht in die zweite schleife rein. findet wohl in der ersten schleife nix, ist dann am ende und hört auf ohne was zu schreiben auf. jetzt muss ich nur noch kapieren woran es liegt... danke schonmal für eure hilfe. falls euch noch einfällt was ich falsch mache gebt bescheid

nahpets 13. Okt 2008 15:23

Re: text in richedit einlesen
 
Hallo,
Zitat:

Zitat von tadlanra
Hm irgendwie will er nicht in die zweite schleife rein. findet wohl in der ersten schleife nix, ist dann am ende und hört auf ohne was zu schreiben auf. jetzt muss ich nur noch kapieren woran es liegt... danke schonmal für eure hilfe. falls euch noch einfällt was ich falsch mache gebt bescheid

bei meinem Beispiel muss es eine Zeile geben, die nur aus dem Wort start besteht und eine Zeile, die nur aus dem Wort ende besteht.
Bei DeddyH's Vorschlag reicht es aus, wenn die als Parameter übergebenen Zeichenfolgen in den gelesenen Zeile enthalten sind.

Reset(f) öffnet die Datei, EoF stört sich nicht ein Zeilenumbrüchen.

tadlanra 13. Okt 2008 15:30

Re: text in richedit einlesen
 
:) danke nahpets dein programm funktioniert wenn ichs die suchwörter in eine zeile schreib. lässt ja hoffen das ich das ander auch noch zum laufen bekomme.

DeddyH 13. Okt 2008 15:37

Re: text in richedit einlesen
 
Mal etwas umgeschrieben (wieder ungetestet):
Delphi-Quellcode:
procedure ReadFromTil(const sl: TStrings; const sStart, sEnd, sFile: string);
var f: TextFile;
    s: string;
begin
  if not FileExists(sFile) then
    raise Exception.CreateFmt('Datei "%s" existiert nicht.',[sFile])
  else
    begin
      sl.BeginUpdate;
      try
        sl.Clear;
        AssignFile(f,sFile);
        Reset(f);
        while not (EOF(f) or AnsiContainsText(s,sStart)) do
          readln(f,s);
        while not (EOF(f) or AnsiContainsText(s,sEnd)) do
          begin          
            sl.Add(s);
            readln(f,s);
          end;
        CloseFile(f);
      finally
        sl.EndUpdate;
      end;
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:16 Uhr.

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