AGB  ·  Datenschutz  ·  Impressum  







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

Large Text File Viewer programmieren

Ein Thema von luke2 · begonnen am 19. Sep 2012 · letzter Beitrag vom 20. Sep 2012
Antwort Antwort
Seite 1 von 2  1 2      
luke2

Registriert seit: 17. Jun 2009
117 Beiträge
 
#1

Large Text File Viewer programmieren

  Alt 19. Sep 2012, 17:49
Delphi-Version: XE2
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!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 18:40
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 19:14
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.
  Mit Zitat antworten Zitat
luke2

Registriert seit: 17. Jun 2009
117 Beiträge
 
#4

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 19:59
Danke für eure Vorschläge, dann werde ich das mal so versuchen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 20:28
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 21:59
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
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 22:05
Damit würde Springen zu bestimmten Zeilen in der Datei relativ schnell
...nachdem man die gesammte Datei einmal eingelesen hat, vorher nicht
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#8

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 22:18
...nachdem man die gesammte Datei einmal eingelesen hat, vorher nicht
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.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 22:33
...nachdem man die gesammte Datei einmal eingelesen hat, vorher nicht
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.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: Large Text File Viewer programmieren

  Alt 19. Sep 2012, 22:42
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:01 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