Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Handler für typisierte Dateien (Unit) (https://www.delphipraxis.net/85481-handler-fuer-typisierte-dateien-unit.html)

CK_CK 31. Jan 2007 13:38


Handler für typisierte Dateien (Unit)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

seit längerer Zeit ist bei mir diese Unit in Verwendung, wenn es darum geht, mehrere Daten gleichen Typs in einer Datei zu speichern. Da eine Datenbank für diese Fälle viel zu übertrieben war, habe ich sie geschrieben und möchte sie euch nicht vorenthalten... (siehe Anhang)

Im Kopf der Unit kann der Datentyp festgelegt werden, der in der Datei gespeichert wird (ist ein Record).

Die Routinen machen dann den Rest.

Der Konstruktor bekommt als Argument den gewünschten Dateinamen und schon kann man mit
> Clear() -> alle Elemente löschen
> addElement(DataSet: TDataSet) -> Ein Element (DataSet) am Ende anfügen
> addElement(Index: Integer; DataSet: TDataSet) -> Ein Element (DataSet) an Position Index einfügen
> getElement(Index: Integer): TDataSet -> Das Element an Position Index auslesen
> delElement(Index: Integer): Boolean -> Das Element an Position Index löschen (gibt zurück, ob es funktioniert hat)

TDataSet ist der Record, der am Anfang der Unit definiert wurde...

Wenn ihr Ideen/Kritiken/Verbesserungsvorschläge habt, immer her damit :stupid:

Viele Grüße,
Chris

PS: Die Unit ist sehr gut kommentiert, also auch für Anfänger geeignet... ;)

Edit: Oder hätte ich dies lieber in der CodeLib posten sollen? :gruebel:

CK_CK 2. Feb 2007 15:20

Re: Handler für typisierte Dateien (Unit)
 
Hat jemand Fehler gefunden?

Wenn jetzt keine Antwort mehr kommt, werte ich die Unit mal als akzeptabel/fehlerfrei... :stupid:

Viele Grüße,
Chris

shmia 2. Feb 2007 16:53

Re: Handler für typisierte Dateien (Unit)
 
Meine Anmerkungen:
1.) man sollte die Unit von den uralten Pascalfunktionen AssignFile, Rewrite, read, write,... auf die Klasse TStream umstellen.
Damit ist man nicht nur auf Dateien beschränkt, sondern kann die Daten aus beliebigen Streams (z.B. TCP/IP) lesen und schreiben

2.) diese typisierten Dateien, die nur eine feste Recordstruktur mit fester Länge aufnehmen können ist Technik von Stand 1970.
Wenn man viele (10 - 10000) gleichartige Recorddaten speichern/laden möchte mag das vielleicht die Methode mit dem geringsten Overhead sein,
aber schon allein das Löschen eines einzigen Records verursacht grosses "Tamtam" im Speicher und auf der Platte.
Die Nachteile sind gravierend:
  • nicht selbstschreibend (im Gegensatz zu XML)
  • nicht portabel (Small/Big Endian Problematik)
  • starr und unflexibel
  • nicht hierarchisch
  • keinerlei Informationen über Version, letztes Änderung, Name der Anwendung die die Daten erzeugt hat
  • es gibt keine Viewer und keine Editoren (im Gegensatz zu XML oder INI-Dateien)
Wenn man jetzt versucht, einige dieser Nachteile abzumildern, dann landet man im Prinzip bei einer dBase-Datei.
Eine dBase-Datei hat einen Header, der grundlegende Dinge wie z.B. Anzahl Datensätze, Aufbau der Felder erklärt.
Zusätzlich hat jeder Record ein Löschflag.
Es gibt Editoren und Viewer für das dBase-Format.

Also wie könnte man sonst seine Applikationsdaten speichern?
da gäbe es
XML - viel Overhead, grosse Dateien, aber sehr flexibel
Hierarchical Data Format
Interchange File Format binäres, platzsparendes Datenformat
SDXF: Structured Data eXchange Format
Structured Storage von Microsoft (im Prinzip ein Dateisystem in einer einzigen Datei)

max.wildgrube 17. Mai 2007 14:51

Re: Handler für typisierte Dateien (Unit)
 
gibt es eine Unit (source code) für SDXF ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 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