Was eine Datei ist, hängt – wie so oft – vom Blickwinkel des Betrachters ab. Aus der Sicht des Anwenders / Benutzers ist eine Datei eine mehr oder weniger wichtige Datensammlung, in der z.B. alle Informationen über den momentan vorhandenen Warenbestand enthalten sind. Aus dieser Sicht sind in Dateien Artikelnummern, Bestellmengen und Preise gespeichert, die zur Erledigung der jeweiligen Aufgaben möglichst bequem, schnell und in der richtigen Auswahl zur Verfügung stehen sollten. Aus der Sicht des Betriebssystems sind – salopp betrachtet – Dateien ziemlich eintönige Folgen von Bytes, die auf der Hardware einen bestimmten Platz belegen. Es genügt, wenn man die vielen Bytes, die zu einer Datei gehören auf den nächsten freien Platz schüttet und sich merkt wo die Datei anfängt, und falls der Inhalt an mehreren Stellen verteilt gespeichert werden musste, in welcher Reihenfolge die Teile zusammengehören. Viel wichtiger ist es da schon, den Dateiinhalt so zu speichern, dass man die Datei schnell wieder bereitstellen kann, und wenn vor allem penibel darauf geachtet wird, dass nur berechtigte Benutzer auf die einzelnen Dateien zugreifen können und dabei bloß nie die Inhalte unterschiedlicher Dateien durcheinander geraten oder gar verloren gehen. Dass Byte 400 bis 412 besonders wichtig sind, da dort mein Kontostand gespeichert ist, ist dem Betriebssystem völlig schnuppe. Aus seiner Sicht sind alle Dateien lediglich Folgen von Bytes, die möglichst rasch von A nach B zu transportieren sind, ohne dass ein Bit verloren geht. Der Programmierer steht genau zwischen beiden Extremen. Er steht vor dem Problem, die Wünsche des Anwenders, der mit Texten, Mengen, Preisen und Datensätzen arbeitet, auf den beschränkten Möglichkeiten des jeweiligen Betriebssystems abzubilden, das grundsätzlich nur eine mehr oder weniger große Anzahl von Bytes über einen bestimmten Dateinamen zur Verfügung stellt.
|
Und nun zum Speziellen: Delphi bietet wie viele andere Programmiersprachen dem Entwickler unterschiedliche Möglichkeiten zur Bearbeitung von Dateien an, denen jeweils ganz bestimmte Konzepte zu Grunde liegen. |
Textfile |
File of Records |
File-Stream |
untypisierte Dateien |
Beispiel: Den 1. Datensatz aus der Datei lesen. Falls dies der Datensatz des Mitarbeiter „Härtl" ist, das Gehalt auf 10000 ändern. |
!!! Abweichendes Beispiel !!! !!! Kopieren einer Datei !!! |
||
procedure DemoTextdatei; var Datei : TextFile; begin |
procedure DemoFileOfRecords;
|
procedure DemoFileStream; |
procedure DemoFileOfStrukturlos; |
Textfile |
File of Records |
File-Stream |
untypisierte Dateien |
Eine Textdatei ist
eine Ansammlung von Zeichen, die in Zeilen angeordnet sind.
Die zu verwaltenden Daten werden jeweils als einzelne Textzeilen gespeichert, die durch Zeilenendemarken getrennt sind, i.d.R. CRT oder CRT + LF.
|
Eine solche Datei
besteht aus einzelnen Datensätzen. Alle Datensätze in der Datei haben
die gleiche Struktur woraus folgt, dass jeder Datensatz gleich lang
ist,
z.B. Artikelsatz(ArtNr, Name, Bestand).
|
Datei-Streams sind
eine Spezialisierung der allgemeinen Stream-Klasse und das
objektorientierte Pendant zur Dateiverarbeitung und werden in Delphi
über die Klasse TFileStream zur Verfügung gestellt.
Die Verarbeitung von Dateien kann hier über ein einfaches, elementares Konzept mit lediglich 3 Methoden und 2 Attributen bewerkstelligt werden. |
Elementare „low level
Dateiverarbeitung"
Eine Datei wird dabei als strukturlose aufeinanderfolge von Bytes betrachtet.
|
Vorteil:
Einfach zu programmieren. Die Datensätze dürfen unterschiedlich lang sein. Nachteil: Ältere Implementierungen beschränken die maximale Zeilenlänge auf 255 Byte. Konzept eignet sich nicht zur Abbildung komplexer Datenstrukturen. Nur sequentielle Dateiverarbeitung. (Keine wahlfreie Zugriffsreihenfolge – Random Access - auf die einzelnen Datensätze möglich.) Änderungen innerhalb einer bestehenden Datei verlangen grundsätzlich, dass die gesamte Datei „neu geschrieben wird". Eignung: Für Datenbestände mit geringer Struktur, deren Überarbeitung nicht zeitkritisch ist. (EMail, Quellprogramme) Standardmethoden: (Siehe auch Delphi-Hilfesystem) Datei öffnen / schließen Lesen und Schreiben ganzer Zeilen. Abfrage auf Zeilenende (EndOfLine) und Dateiende (EndOfFile) Kein freies Positionieren (Seek) der Dateimarke innerhalb der Datei möglich. |
Vorteil:
Komplexe Datenstrukturen können direkt auf Dateien abgebildet werden, z.B. Artikeldatei als File of TKundensatz. Änderung einzelner Datensätze innerhalb der Datei möglich. Wahlfreier Zugriff (Random Access) möglich. Nachteil: Für unterschiedliche Datenstrukturen müssen unterschiedliche Dateien verwaltet werden. Eine spätere Veränderung der Datenstruktur verlangt eine „Reorganisation" der gesamten Datei. Erzwingt bei praktischen Anwendungen, dass im Datenbestand unnötige „Leerbytes" gespeichert werden müssen. Ist z.B. das Attribut Name als string[20] vereinbart, belegen auch kurze Namen denselben Speicherplatz. Längere Namen müssen auf 20 Zeichen abgeschnitten werden. Eignung: Standarddateityp zur Verwaltung von Datenbeständen mit festem Format und wahlfreiem Zugriff, wie z.B. Kundendatensätzen, Artikeldatensätzen. (Zugriff kann über spezielle Indexdateien zusätzlich beschleunigt werden.) Standardmethoden: (Siehe auch Delphi-Hilfesystem) Freies Positionieren (Seek) innerhalb der Datei möglich. |
Vorteil:
Objektorientiertes „Allround-Konzept". Leicht portierbar. Streams sind nicht an eine bestimmte Hardware gebunden. Das gleiche Grundkonzept kann ebenso zur Datenspeicherung auf verschiedenen Medien, wie auch zur Kommunikation mit anderen Prozessen benutzt werden. Nachteil: (kaum signifikant) Bietet dem Programmierer – vergleichbar untypisierten Dateien – lediglich eine amorphe Struktur auf der komplexe Datenstrukturen nicht unmittelbar unterstützt werden. (… aber leicht abgebildet werden können.) Eignung: Standardschnittstelle zur persistenten Datenhaltung für objektorientierte Systeme. Attribute: (Handle,) Size, Position Standardmethoden: (Siehe auch Delphi-Hilfesystem) Create, Free (nicht Destroy verwenden) Read, Write, Seek Freies Positionieren (Seek) innerhalb der Datei möglich. EndOfFile kann über den Vergleich (Position = Size) bestimmt werden |
Vorteil:
Elementares Konzept, das leicht portierbar und über das Blockkonzept hohe Übertragungsgeschwindigkeiten erreichen kann. Nachteil: Bietet dem Programmierer lediglich eine amorphe Struktur, auf der sich komplexe Datenstrukturen nur indirekt abbilden lassen. Standardmethoden: Wie „file of records". Lesen und Schreiben über „BlockRead" und „BlockWrite" |
29. März 2007 Siegfried Spolwig |
|