AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Handler für typisierte Dateien (Unit)
Thema durchsuchen
Ansicht
Themen-Optionen

Handler für typisierte Dateien (Unit)

Ein Thema von CK_CK · begonnen am 31. Jan 2007 · letzter Beitrag vom 17. Mai 2007
Antwort Antwort
Benutzerbild von CK_CK
CK_CK
Registriert seit: 30. Aug 2005
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

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?
Angehängte Dateien
Dateityp: pas utypefile_190.pas (6,8 KB, 39x aufgerufen)
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
 
Benutzerbild von CK_CK
CK_CK

 
Delphi 2006 Enterprise
 
#2
  Alt 2. Feb 2007, 15:20
Hat jemand Fehler gefunden?

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

Viele Grüße,
Chris
  Mit Zitat antworten Zitat
shmia

 
Delphi 5 Professional
 
#3
  Alt 2. Feb 2007, 16:53
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)
Andreas
  Mit Zitat antworten Zitat
max.wildgrube
 
#4
  Alt 17. Mai 2007, 14:51
gibt es eine Unit (source code) für SDXF ?
  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 15:25 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