![]() |
Delphi-Version: XE2
Large Text File Viewer programmieren
Hallo,
evtl. kennt jmd. hier dieses Programm: ![]() 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! |
AW: Large Text File Viewer programmieren
Die banale antwort lautet, was angezeigt werden kann wird vorher gelesen.
Als Pseudocode ungefähr so:
Code:
wenn Du eine strukturierte Datei hast, ist die Navigation relativ einfach, da Du mit
toread:=clientheight / textheight;
for i:=1 to toread do readln(datei,zeile); Zitat:
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 |
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. |
AW: Large Text File Viewer programmieren
Danke für eure Vorschläge, dann werde ich das mal so versuchen :wink:
|
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.
|
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: |
AW: Large Text File Viewer programmieren
Zitat:
|
AW: Large Text File Viewer programmieren
Zitat:
|
AW: Large Text File Viewer programmieren
Zitat:
|
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 02:47 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 by Thomas Breitkreuz