AGB  ·  Datenschutz  ·  Impressum  







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

Textdatei zum Lesen & Schreiben öffnen

Ein Thema von glkgereon · begonnen am 14. Mär 2007 · letzter Beitrag vom 15. Mär 2007
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Re: Textdatei zum Lesen & Schreiben öffnen

  Alt 14. Mär 2007, 16:15
Ich hatte grad schon wieder ne neue Idee

Eine verkette Liste mit Strings...

Delphi-Quellcode:
TLine = class
  Next, Prev: TLine;
  Text: String;
  Changed: Boolean; //2 Byte?
end;
jedes repräsentiert eine Zeile...
Vorteil:
man könnte einmal die Datei "analysieren" und sich die Liste aufbauen (erzeugt natürlich Overhead 10 Byte pro Zeile ist leider nicht wenig... )

Nun wird zum Laden einfach mittels eines gemoddeten TFileStreams zur x'ten Zeile gesprungen (x = Pos-(Bufsize div 2)) und mittels FS.ReadLn geladen. Alles was ausserhalb des gebufferten Bereichs liegt und nicht geändert wurde wird geleert (Text:=''

Somit befindet sich immer nur der Overhead, die gebufferten Zeilen und die geänderten Zeilen im Speicher. Ich denke deutlich besser geht es nicht^^
Beispielrechung (Das Beispiel ist eine (der kleineren) Datei die ich vorliegen hab, also durchaus realistisch ):
2 Mio Zeilen
ca. 50 Zeichen/Zeile
1000 Zeilen editiert
Buffer: 100000 Zeilen

Dateigröße: 2Mio * 50 = 100MB
Overhead: 10*2Mio = 20MB
Buffer: 100000*50 = 5MB
Geändert: 1000*50 = 50KB (Die höchstwahrscheinlich schon im Buffer sind)

Das ganze ist eigentlich genial:
Einfügen von Zeilen ist dank der verketteten Liste ein Kinderspiel, einfügen von Buchstaben kann in handlichen Stücken (in der Zeile) erfolgen. Löschen ist ebenfalls kein Problem.

Einziges Problem ist das Speichern, aber auch das sollte gar nicht so schwer sein...Mein Ansatz: Speichern in eine neue Datei, alte Datei löschen, neue umbenennen, fertig.
Also Zeile für Zeile durchgehen, falls was im Buffer steht das nehmen, ansonsten aus der alten Datei lesen.
Event. sogar das 2-Dateien-System an den User weitergeben und mit einer "Quelldatei" und einer "Arbeitsdatei" basteln lassen.

Nun, was natürlich stört ist die Dateigröße...
event. wäre es ja möglich die liste nur so groß zu machen wie der Buffer ist und somit den overhead auf ein minimum beschränken...
allerdings ist dann das mit dem ändern nicht mehr so schön einfach :-/
ideen?
»Unlösbare Probleme sind in der Regel schwierig...«
  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 17:57 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