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
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.124 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 20:26
Moin 187,

bei derart grossen Dateien wirst Du um den dynamischen Zugriff auf die gerade angezeigten Daten (mit einem Stück davor und danach) spätestens ab 2GB (unter besonderen Umständen auch 3GB) nicht herumkommen, denn sonst geht Dir der Speicher aus.
Auch und gerade, wenn in der Datei noch gesucht/editiert werden soll, werden sich grosse Datenmengen im Speicher als erhebliche Bremse auswirken.
Lade einfach mal eine 500MB grosse Datei ins Notepad und versuch' mal eine Zeile einzufügen.
Dann kannst Du, meiner Erfahrung nach, bequem Kaffee kochen gehen bevor sich etwas rührt.

Als Stichwort für den Zugriff auf grosse Dateien kämen eventuell auch Memory Mapped Files in Frage (MMF) (zumindest wollte ich mir die mal für den genannten Zweck demnächst ansehen )
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
-187-

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

AW: Große Textdateien verarbeiten

  Alt 7. Apr 2011, 20:42
Ich hab mir einfach mal eine Datenbank zusammengebastelt weil es noch eine am einfachsten für mich realisierbare Variante wäre.

Speicherbedarf hab ich sogut wie garkein...Jedoch brauch ich für 500000 Zeile (7 mb) immernoch 2:30min :/ (Das liegt vielleicht daran weil ich für jede Zeile das Query ausführe, vielleicht kann man das noch optimieren.

Delphi-Quellcode:
  StartTime:=Time;
  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);
          IBQuery1.Close;
          IBQuery1.SQL.Clear;
          IBQuery1.SQL.Add('INSERT INTO LINES(MYFIELD) VALUES('''+tmp+''');');
          IBQuery1.Open;
        end;
      CloseFile(F);
    end;
  end;
  EndTime:=Time;
  ShowMessage('Time: '+TimeToStr(EndTime-StartTime));
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:52 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