![]() |
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 :) |
Re: text in richedit einlesen
Hallo,
Vorschlag:
Delphi-Quellcode:
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").
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; 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'); |
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
|
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; |
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
|
Re: text in richedit einlesen
Hallo,
Zitat:
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. |
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.
|
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 12:57 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