Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Large Text File Viewer programmieren (https://www.delphipraxis.net/170481-large-text-file-viewer-programmieren.html)

luke2 19. Sep 2012 16:49

Delphi-Version: XE2

Large Text File Viewer programmieren
 
Hallo,

evtl. kennt jmd. hier dieses Programm: http://www.swiftgear.com/ltfviewer/features.html
Damit kann eine beliebig große Datei angezeigt werden, ohne viel Speicher zu verbrauchen.
Es wird halt immer nur der Teil aus der Datei angezeigt, der auch angezeigt werden soll.

Habt ihr eine Idee, wie man das am besten mit Delphi nachprogrammieren könnte?
Das Auslesen der Datei wäre kein Problem, aber woher weiß ich, welcher Teil der Datei ausgelesen und angezeigt werden muss? Wie lässt sich das am besten berechnen?

Danke für jeden Tipp!

p80286 19. Sep 2012 17:40

AW: Large Text File Viewer programmieren
 
Die banale antwort lautet, was angezeigt werden kann wird vorher gelesen.
Als Pseudocode ungefähr so:
Code:
toread:=clientheight / textheight;
for i:=1 to toread do
  readln(datei,zeile);
wenn Du eine strukturierte Datei hast, ist die Navigation relativ einfach, da Du mit
Zitat:

seek(x*satzlänge)
ganz gut hinkommst.
Wenn allerdings echter Text enthalten ist, so ist das ein wenig anspruchsvoller. Dann kommst Du eigentlich nicht darum herum zumindestens eine Stringliste einzulesen.
Eine andere Möglichkeit wäre eine "Schattendatei" die mit fixen Satzlängen arbeitet, d.h. der längste Satz der Originaldatei gibt die Satzlänge der Schattendatei vor.

Wie groß ist eigentlich "large" ?

Gruß
K-H

Furtbichler 19. Sep 2012 18:14

AW: Large Text File Viewer programmieren
 
Na ja, also mit einer Stringliste müssen wir ja nicht arbeiten.

Am Anfang ist der Dateizeiger bei 0 und wir lesen z.B. immer 1k Blöcke ein (und wandeln das in Zeilen um), bis der Bildschirm komplett gefüllt ist. Der Datensatzzeiger ist nun z.B. bei 2k (wir haben 2x 1k Blöcke eingelesen). Wenn man nun vorwärts scrollt, muss irgendwann der nächste 1k-Block gelesen werden. Na, dann macht man das eben, schmeißt dafür den obersten (der nun nicht mehr sichtbar ist) weg usw.

Rückwärtslaufen geht genauso einfach.

Man muss nur ein wenig überlegen, aber schwer ist das nicht.

luke2 19. Sep 2012 18:59

AW: Large Text File Viewer programmieren
 
Danke für eure Vorschläge, dann werde ich das mal so versuchen :wink:

Luckie 19. Sep 2012 19:28

AW: Large Text File Viewer programmieren
 
Eine andere Idee wären Memory Mapped Files. Allerdings habe ich damit so was noch nie realisiert. Aber mach dich doch mal in diese Richtung schlau.

BUG 19. Sep 2012 20:59

AW: Large Text File Viewer programmieren
 
Ich würde eine Abbildung zwischen Zeilenpositionen und Blöcken (gleicher Größe) innerhalb der Datei machen.
Dafür würde ich für mir jeden Block, an den ich ausgelesen habe, merken, welche die erste Zeilennummer im Block ist.

Als Blockgröße würde ich 4kB vorschlagen, wenn du eh mit Memory Mapped Files arbeitest.
Der Index wäre dann aber auch relativ groß (ca. 20MB-40MB bei einer 20GB großen Datei).
Bei größeren Blöcken (zB. 4MB) wäre er entsprechend kleiner (20kB-40kB).

Damit würde Springen zu bestimmten Zeilen in der Datei relativ schnell :mrgreen:

Furtbichler 19. Sep 2012 21:05

AW: Large Text File Viewer programmieren
 
Zitat:

Zitat von BUG (Beitrag 1183625)
Damit würde Springen zu bestimmten Zeilen in der Datei relativ schnell :mrgreen:

...nachdem man die gesammte Datei einmal eingelesen hat, vorher nicht :mrgreen:

BUG 19. Sep 2012 21:18

AW: Large Text File Viewer programmieren
 
Zitat:

Zitat von Furtbichler (Beitrag 1183626)
...nachdem man die gesammte Datei einmal eingelesen hat, vorher nicht :mrgreen:

Dann könnte man die anderen Strategien verfolgen und dabei den Index gleich mit aufbauen. Sobald man in der Datei sucht, muss man eh kontinuierlich lesen. Dabei kann man den Index gleich mit aufbauen. Man könnte den Index sogar speichern und bei Dateien, an die nur angehangen wird (bei großen Textdateien nicht unwahrscheinlich), sogar behalten, wenn die sich geändert haben.

Furtbichler 19. Sep 2012 21:33

AW: Large Text File Viewer programmieren
 
Zitat:

Zitat von BUG (Beitrag 1183628)
Zitat:

Zitat von Furtbichler (Beitrag 1183626)
...nachdem man die gesammte Datei einmal eingelesen hat, vorher nicht :mrgreen:

Dann könnte man die anderen Strategien verfolgen und dabei den Index gleich mit aufbauen. Sobald man in der Datei sucht, muss man eh kontinuierlich lesen...

Sag ich doch. Man muss die Datei einmal komplett durchgelesen haben und schnell zu einer bestimmten Zeile zu springen. "Langsam" geht das natürlich sofort.

p80286 19. Sep 2012 21:42

AW: Large Text File Viewer programmieren
 
Es gäbe ja auch die Möglichkeit die ersten Zeilen zu lesen und während der Anzeige in einem zweiten thread weiter zu lesen.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 Uhr.
Seite 1 von 2  1 2      

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