AGB  ·  Datenschutz  ·  Impressum  







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

Große Textdateien verarbeiten

Ein Thema von -187- · begonnen am 7. Apr 2011 · letzter Beitrag vom 7. Apr 2011
Antwort Antwort
Seite 3 von 5     123 45      
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#21

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 14:11
@DeddyH VST?

Wie wäre es denn mit den Methoden aus der guten alten Dos-Zeit?
Du schleppst eine Kombination aus Dateinamen und "Zeilenzeiger" mit und zeigst nur die 1,2,...n Zeilen an, die auf den Bildschirm passen. Das ist auf jeden Fall speicherschonend, aber etwas aufwendig zu programmieren.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#22

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 14:31
Virtual String Tree oder auch Virtual Treeview
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
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#23

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 14:37
Ja tatsächlich Kundenwunsch ... Der Kunde möchte dann durch die zusammengefügte Datei in einer Textbox (Memo) scrollen und ggf. Nacharbeitungen vornehmen.

Jedoch besteht der erste Schritt nur aus dem zusammenfügen der Dateien + Darstellung im Memo.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.120 Beiträge
 
Delphi 12 Athens
 
#24

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 14:44
Die Datei direkt in einen string laden > natürlich die Ansi-Unicode-Umwandlung nicht vergessen, da die Datei bestimmt mit ANSI gefüllt ist und dein Delphi Unicode nutzt.
(oder in einen AnsiString laden und dann Delphi es umwandeln lassen)

Und dann diesen string direkt an Memo1.Text übergeben.


Dateien zusammenfügen, indem alles Dateien hintereinander in den String geladen werden.


Delphi-Quellcode:
if FileExists(Path) then
begin
  AssignFile(F,Path);
  Reset(F);
  while not eof(F) do
  begin
    Readln(F,tmp);
    Form1.Memo1.Lines.Add(tmp);
  end;
  CloseFile(F);
end;
im Vergleich zu Diesem ... was von dem Folgenden dauert denn wie lange?
Delphi-Quellcode:
if FileExists(Path) then
begin
  AssignFile(F,Path);
  // hier noch den Buffer vergrößen
  Reset(F);
  while not eof(F) do
  begin
    Readln(F,tmp);
    //Form1.Memo1.Lines.Add(tmp);
  end;
  CloseFile(F);
end;
Delphi-Quellcode:
if FileExists(Path) then
begin
  AssignFile(F,Path);
  // hier noch den Buffer vergrößen
  Reset(F);
  tmp := 'hier irgendwas mit der durchschnittlichen Länge einer Zeile reinmachen';
  for i := 1 to Anzahl_der_Zeilen do
  //while not eof(F) do
  //begin
  // Readln(F,tmp);
    Form1.Memo1.Lines.Add(tmp);
  //end;
  CloseFile(F);
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#25

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 15:04
Hm also ich hab jetzt grad schonmal gemessen und bin zu folgendem Ergebnis gekommen:

Code:
file: 20mb, 1372022 Lines
time: 10:34 min
Delphi-Quellcode:
begin
  StartTime:=Time;
  Memo1.Lines.BeginUpdate;
  for i:=1 to Form1.StringGrid1.RowCount do
  begin
    Path:=Form1.StringGrid1.Cells[1,i];
    if FileExists(Path) then
    begin
      AssignFile(F,Path);
      Reset(F);
      while not eof(F) do
        begin
          Readln(F,tmp);
          Form1.Memo1.Lines.Add(tmp);
        end;
      CloseFile(F);
    end;
  end;
  Memo1.Lines.EndUpdate;
  EndTime:=Time;
  ShowMessage('Time: '+TimeToStr(EndTime-StartTime));
end;

Code:
file: 20mb, 1372022 Lines
time: 00:22 min
Delphi-Quellcode:
begin
  StartTime:=Time;
  sl:=TStringList.Create;
  for i:=1 to Form1.StringGrid1.RowCount do
  begin
    Path:=Form1.StringGrid1.Cells[1,i];
    if FileExists(Path) then
    begin
      AssignFile(F,Path);
      Reset(F);
      while not eof(F) do
        begin
          Readln(F,tmp);
          sl.Add(tmp);
        end;
      CloseFile(F);
    end;
  end;
  Memo1.Text:=sl.Text;
  sl.Free;
  EndTime:=Time;
  ShowMessage('Time: '+TimeToStr(EndTime-StartTime));
end;
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#26

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 15:09
Der Kunde möchte [...] ggf. Nacharbeitungen vornehmen.
Das klappt dann mit virtuellen Systemen nicht mehr ... oder? *deddyh anschiel*

Wie wäre es also doch in etwa so, wie es p80286 vorgeschlagen hat: Nicht alles auf einmal anzeigen. Diese Forum z.B. zeigt ja auch nicht alle Threads einer Kategorie auf einmal an, sondern stückweise verpackt in übersichtliche Seiten
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#27

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 15:11
Ich wollt es erstmal mit einfachen Dingen versuchen Vielleicht finden wir ja noch eine akzeptable Lösung :/
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#28

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 15:12
Nennt man glaube ich dynamisches lesen und bearbeiten von grossen Textdateien!
(evtl gerade erfunden)
Der Kunde bekommt davon gar nichts mit!
Er scrollt in den Text so, als währe er komplett im Speicher.
alfold
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#29

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 15:13
@-187-:
1GB auf einmal in 'nen Memo zu laden zählt ganz sicher nicht zu "einfach"
(Ist ein Memo nicht mal auf 64kB begrenz gewesen?)
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#30

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 15:14
Das wäre ziemlich einfach über eine DB (DBGrid) zu lösen ... Wäre eine Überlegung wert.

Edit: Oder TDBMemo

Geändert von -187- ( 7. Apr 2011 um 15:16 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 11:17 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