AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

text in richedit einlesen

Ein Thema von tadlanra · begonnen am 13. Okt 2008 · letzter Beitrag vom 13. Okt 2008
Antwort Antwort
tadlanra

Registriert seit: 9. Sep 2008
Ort: Kleve
13 Beiträge
 
Delphi 2006 Professional
 
#1

text in richedit einlesen

  Alt 13. Okt 2008, 11:10
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: text in richedit einlesen

  Alt 13. Okt 2008, 11:25
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');
  Mit Zitat antworten Zitat
tadlanra

Registriert seit: 9. Sep 2008
Ort: Kleve
13 Beiträge
 
Delphi 2006 Professional
 
#3

Re: text in richedit einlesen

  Alt 13. Okt 2008, 12:26
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.613 Beiträge
 
Delphi 12 Athens
 
#4

Re: text in richedit einlesen

  Alt 13. Okt 2008, 12:49
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
tadlanra

Registriert seit: 9. Sep 2008
Ort: Kleve
13 Beiträge
 
Delphi 2006 Professional
 
#5

Re: text in richedit einlesen

  Alt 13. Okt 2008, 15:09
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: text in richedit einlesen

  Alt 13. Okt 2008, 15:23
Hallo,
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.
  Mit Zitat antworten Zitat
tadlanra

Registriert seit: 9. Sep 2008
Ort: Kleve
13 Beiträge
 
Delphi 2006 Professional
 
#7

Re: text in richedit einlesen

  Alt 13. Okt 2008, 15:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.613 Beiträge
 
Delphi 12 Athens
 
#8

Re: text in richedit einlesen

  Alt 13. Okt 2008, 15:37
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:42 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