AGB  ·  Datenschutz  ·  Impressum  







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

Strukturierte Daten in Datei speichern

Ein Thema von Luckie · begonnen am 15. Feb 2003 · letzter Beitrag vom 15. Feb 2003
Antwort Antwort
Seite 2 von 2     12   
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11
  Alt 15. Feb 2003, 21:18
Bei Chewies Lösung musst du die Datei immer wieder komplett (bzw. ab der Änderungsstelle) neu schreiben. Bei meiner nur die veränderten Daten und ggf. den THeader anpassen.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#12
  Alt 15. Feb 2003, 21:47
Moin Luckie,

also ich hab' so etwas noch etwas anders gelöst, nämlich mit der Aufteilung in eine Daten und eine Indexdatei (eben auch "DB like").
In der Indexdatei stehen dann, im Wesentlichen, jeweils der Offset innerhalb der Datendatei, und ein Feld als Flag, das anzeigt, ob der Satz am Offset gültig ist, oder, z.B. gelöscht.

Als Header für die Daten kämen, in Deinem Falle, zwei Felder für die Längen der beiden Felder (Titel und Text) in Frage.

Wird jetzt ein Text/Titel geändert, kannst Du, anhand des gesamt zur Verfügung stehenden Platzes für den Datensatz, entscheiden, ob Du ihn überschreiben kannst (length(Titel)+Length(Text) <= Vorige Länge) oder nicht.
In letzterem Falle wird der Datensatz hinten an die Datendatei angehängt (FileStream.Position := FileStream.Size).
Nun kannst Du in der Indexdatei entweder dem alten Satz den neuen Offset verpassen, und einen neuen Indexsatz mit dem alten Offset und der Markierung "frei oder gelöscht" schreiben, oder aber einen neuen Indexsatz mit dem neuen Offset und auf den alten Indexsatz wird das Flag entsprechend gesetzt.

Durch diese Trennung hast Du den Vorteil, dass Du schnell auf die Sätze zugreifen kannst, ohne Dich mit den Längenfeldern durch die ganze Datei hangeln zu müssen. Gerade bei Texten können die ja grösser ausfallen.
Ausserdem liessen sich bei einer Kennung "frei" ggf. auch Lücken für neue/geänderte Sätze nutzen.

Nachteil: Gelegentlich müsste die Datei komprimiert werden, um den, durch Änderungen nicht mehr genutzten Platz freizugeben.

In der Indexdatei könntest Du dann z.B. auch noch eine ID des Satzes anlegen (Hash Code), oder den Index als verkettete List aufbauen.

Es dürfte, zumindest wenn die Datei grösser wird, wohl schneller gehen die Indexdatei durchzugehen und gezielt einen Satz aus der Datendatei herauszugreifen, als immer die Datendatei durchzulesen.
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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13
  Alt 15. Feb 2003, 21:55
Hm, mal sehen. Evnetuell hab eich eine recht banale Lösung gefunden. Aber danke für die Diskussion.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 20:00 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