Homepage Jasocul

Datei-Operationen:
typisierte Dateien

Die wichtigsten Funktionen zur Stringverarbeitung sind:

Demo-Souce

Die Auszüge aus der Delphi-Online-Hilfe durfte ich mit freundlicher Genehmigung der Firma Borland hier veröffenlichen. Die Hilfe-Texte stammen aus Delphi 5.0

HINWEIS:
In den folgenden Texten werde ich immer wieder von Records schreiben, die in der Datei gespeichert sind. Selbstverständlich kann man auch andere strukturierte Dinge dort speichert. Es muss nur als Type definiert sein. Daher auch der Ausdruck “typisierte Datei”. Allgemeiner könnte man statt Record auch Datei-Komponente schreiben. Üblicherweise findet diese Art der Datei-Verarbeitung mit Records statt. Deshalb habe ich mich entschlossen, gleich diesen Begriff zu verwenden.

Eine typische Frage zum Dateiinhalt einer typisierten Datei:
Immer wieder taucht in den verschiedenen Delphi-Foren eine Frage auf: “Was sind das für merkwürdige Texte in der Datei, die niemand eingegeben hat?”
Die Antwort ist im Prinzip relativ einfach. Das Ganze hängt mit den Datentypen zusammen, die im Record vorkommen. Dazu zwei Beispiele:
1. Numerische Typen, wie Real, Double, etc. werden nicht als Zahlen, wie wir sie auf dem Bildschirm im Speicher verwaltet. Wie genau, würde an diesr Stelle zu weit führen. Dadurch stehen dort scheinbar irgendwelche Steuerzeichen.
2. Strings: Bei einer typisierten Datei werden Strings mit fester Länge definiert. D.h.: Es wird für einen String immer eine feste Anzahl an Zeichen gespeichert. Egal, ob dort was drin steht oder nicht. Die Variable, mit der man aus der Datei liest, weiß aber genau, wieviel Zeichen wirklich gültig sind (Das Längenbyte steht an Stelle 0 und wird mitgespeichert). Der Rest wird vernachlässigt. Trotzdem wird alles, was sich gerade im Speicher bis zur Maximallänge des Strings befindet, in der Datei gespeichert. Also auch Dinge, die niemals jemand eingetippt hat.

Die Funktion FileExists: Prüfen, ob eine Datei existiert

Die Definition gemäß Delphi-Hilfe

function FileExists(const FileName: string): Boolean;

Beschreibung

FileExists gibt True zurück, wenn die im Parameter FileName angegebene Datei vorhanden ist. Existiert die Datei nicht, wird False zurückgegeben.

Kommentar

nicht erforderlich

Was macht diese Funktion?

Sie überprüft das Vorhandensein einer Datei. Dies ist besonders wichtig bei der Dateiverarbeitung. Wird auf eine nicht vorhandene Datei lesend zugegriffen, würde es sonst zu Fehlern kommen.

Beispiele:

entfällt

 

 

Die Prozedur AssignFile: Einer Datei-Variablen eine Datei zuweisen

Die Definition gemäß Delphi-Hilfe

procedure AssignFile(var F; FileName: string);

Beschreibung

Mit AssignFile können Sie eine Dateivariable initialisieren. F ist eine Dateivariable eines beliebigen Dateityps. FileName enthält einen Ausdruck des Typs String bzw. Pchar (wenn die erweiterte Syntax aktiviert ist).

Nach dem Aufruf von AssignFile ist F der externen Datei zugeordnet, bis F wieder geschlossen wird.

Enthält der der Parameter FileName keinen Wert, wird F die Standardeingabe oder Standardausgabe zugewiesen. Wenn Sie F ein leeren String zuweisen, verweist F nach dem Aufruf
Reset (F) auf die Standardeingabe und nach dem Aufruf Rewrite (F) auf die Standardausgabe.

Verwenden Sie AssignFile auf keinen Fall für eine bereits geöffnete Dateivariable.

Hinweis

Zur Vermeidung von Gültigkeitsbereichskonflikten ersetzt AssignFile die in früheren Versionen von Delphi verwendete Prozedur Assign. Diese ist jedoch aus Gründen der Abwärtskompatibilität noch vorhanden.

Kommentar

  • Strings sind die herkömmlichen Pascal-Zeichenketten. PChar sind Zeiger auf Zeichenketten, die etwas anders behandelt werden.
  • Standardeingabe ist üblicherweise die Tastatur. Die Standardausgabe i.d.R. der Monitor. Diese Art der Dateiverarbeitung findet gelegentlich bei Konsolen-Anwendungen statt. Dies soll aber hier nicht behandelt werden.

Was macht diese Prozedur?

Es geht darum, dass einer externen Datei im Programm eine Variable zugeordnet wird. Alle weiteren Zugriffe auf diese Datei erfolgen dann über diese Variable. Die Datei wird im Parameter “FileName” übergeben. Wird kein Verzeichnis angegeben, geht die Prozedur davon aus, dass die Datei im selben Verzeichnis wie das Programm ist.

Beispiele

entfällt

 

 

Die Prozedur Reset: Eine existierende Datei zum Lesen und Schreiben öffnen

Die Definition gemäß Delphi-Hilfe

procedure Reset(var F [: File; RecSize: Word ] );

Beschreibung

Reset öffnet die mit F angegebene externe Datei. Ist keine Datei mit diesem Namen vorhanden, tritt ein Fehler auf. Ist F bereits offen, wird sie zuerst geschlossen und dann erneut geöffnet. Nach dem Öffnen wird der Dateizeiger an den Anfang der Datei gesetzt.

F ist eine Variable eines beliebigen Dateityps, die zuvor mit
AssignFile einer externen Datei zugewiesen wurde. Der optionale Ausdruck RecSize kann nur bei nicht typisierten Dateien verwendet werden und gibt die Datenblockgröße für das Lesen und Schreiben der Datei an. Wird RecSize nicht angegeben, wird der Standardwert 128 verwendet.

Wird F ein leerer String zugewiesen (z.B.
AssignFile(F, '')), zeigt die Variable nach dem Aufruf von Reset auf die Standardeingabedatei.

Bei einer Textdatei ist F nach dem Öffnen schreibgeschützt.

Nach dem Aufruf von Reset hat
Eof(F) den Wert True, wenn die Datei leer ist. Andernfalls ist Eof(F) False.

Hinweis

Mit dem Compiler-Schalter {$I+} können Laufzeitfehler durch Exceptions behandelt werden. Wird {$I–} verwendet, muß explizit mit IOResult auf E/A-Fehler geprüft werden.

Kommentar

  • Da es hier um typisierte Dateien geht, ist die Angabe von RecSize nicht zulässig.
  • Standardeingabe ist üblicherweise die Tastatur. Diese Art der Dateiverarbeitung findet gelegentlich bei Konsolen-Anwendungen statt. Dies soll aber hier nicht behandelt werden.
  • Textdateien werden hier nicht behandelt
  • Man kann die sogenannten E/A-Fehler direkt behandeln. Durch das Exception-Handling (Try..Except) ist das aber nicht erforderlich.

Was macht diese Prozedur?

Mit AssignFile wird einer externen Datei eine Datei-Variable zugeordnet. Mit Reset wird dann diese Datei zum Lesen und Schreiben geöffnet. Solange das nicht passiert ist, kann man nicht viel mit der Datei-Variablen anfangen.

Beispiele

entfällt

 

 

Die Prozedur Rewrite: Eine nicht-existierende Datei zum Lesen und Schreiben öffnen

Die Definition gemäß Delphi-Hilfe

procedure Rewrite(var F: File [; Recsize: Word ] );

Beschreibung

Rewrite erstellt eine neue externe Datei unter dem F zugewiesenen Namen.

F ist eine Variable eines beliebigen Dateityps, die zuvor mit
AssignFile einer externen Datei zugewiesen wurde. Der optionale Ausdruck RecSize kann nur bei nicht typisierten Dateien verwendet werden und gibt die Datenblockgröße für das Lesen und Schreiben der Datei an. Wird RecSize nicht angegeben, wird der Standardwert 128 verwendet.

Ist schon eine gleichnamige externe Datei vorhanden, wird sie gelöscht und an ihrer Stelle die neue Datei angelegt.

Ist F bereits offen, wird sie zuerst geschlossen und dann erneut erstellt. Nach dem Erstellen wird der Dateizeiger an den Anfang der leeren Datei gesetzt.

Wird F ein leerer String zugewiesen (z.B.
AssignFile(F, '')), zeigt die Variable nach dem Aufruf von Rewrite auf die Standardausgabedatei.

Bei einer Textdatei ist F nach dem Öffnen schreibgeschützt.

Nach dem Aufruf von Rewrite hat
Eof(F) immer den Wert True.

Hinweis

Mit dem Compiler-Schalter {$I+} können Laufzeitfehler durch Exceptions behandelt werden. Wird {$I–} verwendet, muß explizit mit IOResult auf E/A-Fehler geprüft werden.

Kommentar

  • Da es hier um typisierte Dateien geht, ist die Angabe von RecSize nicht zulässig.
  • Wird Rewrite auf eine vorhandene Datei angewendet, wird diese gelöscht!
  • Die Standardausgabe i.d.R. der Monitor. Diese Art der Dateiverarbeitung findet gelegentlich bei Konsolen-Anwendungen statt. Dies soll aber hier nicht behandelt werden.
  • Man kann die sogenannten E/A-Fehler direkt behandeln. Durch das Exception-Handling (Try..Except) ist das aber nicht erforderlich.

Was macht diese Prozedur?

Mit AssignFile wird einer externen Datei eine Datei-Variable zugeordnet. Mit Rewrite wird dann diese Datei zum Schreiben geöffnet. Solange das nicht passiert ist, kann man nicht viel mit der Datei-Variablen anfangen.
Eine vorhandene Datei wird automatisch gelöscht, wenn Rewrite aufgerufen wird.

Beispiele

enfällt

 

 

Die Prozedur CloseFile: Eine geöffnete Datei schließen

Die Definition gemäß Delphi-Hilfe

procedure CloseFile(var F);

Beschreibung

CloseFile ersetzt wegen Namenskonflikten die Borland Pascal-Prozedur Close. Verwenden Sie anstelle von Close die Prozedur CloseFile, um die Zuordnung zwischen einer Dateivariablen und einer externen Datei zu beenden.

F ist eine Dateivariable eines beliebigen Typs, die zuvor mit
Reset, Rewrite oder Append geöffnet wurde. Die F zugeordnete externe Datei wird vollständig aktualisiert und anschließend geschlossen, wodurch das Datei-Handle für die erneute Verwendung freigegeben wird.

Hinweis

Mit dem Compiler-Schalter {$I+} können Laufzeitfehler durch Exceptions behandelt werden. Wenn Sie {$I-} verwenden, müssen Sie mit IOResult explizit auf E/A-Fehler prüfen.

Kommentar

  • Die Verbindung zwischen Datei-Variable und physischer Datei muss kontrolliert beendet werden. Ansonsten kann es zu Zugriffsproblemen bei der Datei kommen.
  • Man kann die sogenannten E/A-Fehler direkt behandeln. Durch das Exception-Handling (Try..Except) ist das aber nicht erforderlich.

Was macht diese Prozedur?

Die Prozedur beendet die Verbindung zwischen der Datei-Variablen und der physischen Datei. Würde das nicht gemacht, bliebe ein soganntes Handle auf die Datei im Speicher. Dadurch ist die Datei für weitere Zugriffe gesperrt.

Beispiele

entfällt

 

 

Die Funktion FileSize: "Dateigröße" einer typisierten Datei

Die Definition gemäß Delphi-Hilfe

function FileSize(var F): Integer;

Beschreibung

Mit FileSize können Sie die Größe der angegebenen Datei (F) ermitteln. Die Funktion kann nur für geöffnete Dateien verwendet werden. Wenn die Datei leer ist, gibt FileSize(F) 0 zurück.

Hinweis

FileSize kann nicht für Textdateien verwendet werden.

Kommentar

Diese Funktion gibt nicht die Dateigröße einer Datei als Ergebnis zurück. Sie gibt die Anzahl der Records zurück. Wenn ein Record eine Größe von 200 Byte und in der Datei 3 Records gespeichert sind, so gibt die Funktion als Wert 3 zurück. Die Dateigröße ist aber 600 Byte. Anders wäre es, wenn die Recordgröße genau ein Byte wäre. Dann wären die Werte identisch.

Was macht diese Prozedur?

Die Funktion liefert die Anzahl der Records in der Datei zurück.

Beispiele

entfällt

 

 

Die Funktion FilePos: Position in einer typisierten Datei

Die Definition gemäß Delphi-Hilfe

function FilePos(var F): Longint;

Beschreibung

Mit FilePos können Sie die aktuelle Position in der angegebenen geöffneten Datei ermitteln. Befindet sich der Dateizeiger am Anfang der Datei, wird 0 zurückgegeben. Ansonsten gibt FilePos den Byte-Offset der aktuellen Position vom Dateianfang zurück.

Diese Funktion kann nicht für geschlossene oder Textdateien verwendet werden.

Hinweis

Mit dem Compiler-Schalter {$I+} können Laufzeitfehler durch Exceptions behandelt werden.Wird {$I-}, verwendet, muß explizit mit IOResult auf E/A-Fehler geprüft werden.

Kommentar

  • Wichtig: Es wird bei “0” angefangen zu zählen! Wenn FilePos und FileSize miteinander vergliche werden, muss das bedacht werden.
  • Man kann die sogenannten E/A-Fehler direkt behandeln. Durch das Exception-Handling (Try..Except) ist das aber nicht erforderlich.

Was macht diese Prozedur?

Sie liefert die Position eines Records in der Datei zurück.

Beispiele

entfällt

 

 

Die Prozedur Read: Ein Element der typisierten Datei lesen

Die Definition gemäß Delphi-Hilfe

Typisierte Dateien:

procedure Read(F , V1 [, V2,...,Vn ] );

Beschreibung

Read kann auf folgende Arten verwendet werden:

Bei typisierten Dateien wird eine Dateikomponente in eine Variable eingelesen.

Kommentar

entfällt

Was macht diese Prozedur?

Sie liest einen oder mehrere Records aus der Datei in die entsprechende(n) Record-Variablen ein. Nachdem ein Record gelesen wurde, ist die Position in der Datei hinter diesem Record.

Beispiele

enfällt

 

 

Die Prozedur Write: Ein Element der typisierten Datei schreiben

Die Definition gemäß Delphi-Hilfe

procedure Write(F, V1,...,Vn);

Beschreibung

Write schreibt eine Datei in eine Dateikomponente. F ist eine Dateivariable und jedes V eine Variable mit dem Typ der in F angegebenen Komponente. Nach jedem Schreiben einer Variablen wird der Dateizeiger auf die nächste Komponente gesetzt. Befindet sich der Dateizeiger bereits am Dateiende
(Eof(F) liefert True), wird die Datei vergrößert.

Kommentar

Natürlich wird nicht die Datei in die Dateikomponente geschrieben, sondern genau ungekehrt.

Was macht diese Prozedur?

Irgendwie muss man die Daten ja in die Datei bekommen. Genau das macht man mit dieser Prozedur. Nachdem ein Record geschrieben wurde, ist die aktuelle Date-Position hinter diesem Record.

Beispiele

entfällt

 

 

Die Prozedur Seek: An eine Stelle der typisierten Datei "springen”

Die Definition gemäß Delphi-Hilfe

procedure Seek(var F; N: Longint);

Beschreibung

Mit Seek kann eine geöffnete typisierte oder nichttypisierte Datei auf eine bestimmte Position gesetzt werden. Der Positionszeiger der Datei F wird auf die Komponente mit der Nummer N gesetzt. Die erste Komponente in einer Datei hat immer die Nummer 0.

F ist eine typisierte oder nichttypisierte Dateivariable und N ein Ausdruck des Typs Longint.

Um eine Datei zu vergrößern, geben Sie beim Aufruf von Seek eine Komponente hinter der letzen Komponente in der Datei an. Das bedeutet, daß die Anweisung Seek(F,
FileSize(F)) den Positionszeiger an das Dateiende setzt.

Hinweis

Mit dem Compiler-Schalter {$I+} können Laufzeitfehler durch Exceptions behandelt werden. Wird {$I–} verwendet, muß explizit mit IOResult auf E/A-Fehler geprüft werden.

Kommentar

  • Man kann die sogenannten E/A-Fehler direkt behandeln. Durch das Exception-Handling (Try..Except) ist das aber nicht erforderlich.

Was macht diese Prozedur?

Oft muss man bei typisierten Dateien an den Anfang, ans Ende, einen Record zurück oder einen Record weiter gehen. Mit Seek ist das möglich.

Beispiele

Seek(F, FilePos(F)-1)

So geht man einen Record zurück. Angenommen man liest einen Record ein, um ihn zu bearbeiten, muss man den Datei-Zeiger wieder auf den Anfang dieses Records setzen, um die Änderungen an die richtige Stelle der Datei schreiben zu können.

 

Die Funktion EOF: Ende der Datei (End Of File)

Die Definition gemäß Delphi-Hilfe

function Eof(var F): Boolean;

Für Textdateien:

function Eof [ (var F: Text) ]: Boolean;

Beschreibung

Eof prüft, ob die aktuelle Dateiposition mit dem Dateiende identisch ist. F ist eine Dateivariable. Fehlt dieser Parameter, wird die Standardvariable Input verwendet.

Eof(F) gibt True zurück, wenn sich die aktuelle Dateiposition hinter dem letzten Zeichen der Datei befindet oder wenn die Datei leer ist. Andernfalls wird False zurückgegeben.

Kommentar

entfällt

Was macht diese Prozedur?

Wenn man neue Records anfügen will, ist es wichtig, dass man am Datei-Ende steht. Ansonsten überschreibt man andere Daten. Mit Eof stellt man dieses fest.

Beispiele

enfällt

 

[Startseite] [Wichtige Links] [Tutorials] [Downloads] [FAQ] [Buchvorstellung]

[Haftung] [Datenschutz] [Impressum] [Gästebuch] [Chat]