Datei ein komplexer Datentyp, der primär zur dauerhaften (persistenten) Speicherung von Daten auf einen externen Datenträger dient die wichtigsten Operationen, die mit Dateien durchgeführt werden, sind das Öffnen und Schließen von Dateien, sowie Lese- und Schreiboperationen wichtigste Formen von Dateien sind Textdateien und Binärdateien (Dateien mit formatiertem oder unformatiertem Inhalt) 1. Allgemeine Datei (Binärdatei mit formatierten Inhalt) besteht aus Datensätzen gleichen Typs (alle Datentypen außer Typ file) logische Satznummer (Nummerierung beginnt mit 0) logischer Satzzeiger weist auf aktuell ansprechbaren Datensatz kann nur vom erstellenden Programm bearbeitet werden Modellvorstellung: 0 Hansen Werner 43 -----> 1 Momsen Walter 11 2 Herder Klaas 21 eof Zeile... Datensatz, Zelle... Datenfeld, 1.Spalte..Satznummer, Pfeil... Satzzeiger Deklarationsbeispiel für Datensatz: type TDatensatz = record name, vorname : string[30]; alter : byte; end; var Person, Datensatz : TDatensatz; Die Variable Person ist vom Datentyp Verbund (record) Zusammenfassung von Daten auch unterschiedlichen Typs unter einem Bezeichner.
Zugriff: <Verbundbezeichner>.<Komponentenbezeichner> Person.name := 'Hansen'; Person.vorname := 'Werner'; Person.alter := 43; oder mit with- Anweisung with Person do begin name := 'Hansen'; vorname := 'Werner'; alter := 43; end; Datensatz := Person; //gleicher Typ vorrausgesetzt Zurück zur allgemeinen Datei: Deklaration Dateityp, Dateivariable: type <Typbezeichner> = file of <Typbezeichner>; Bsp.: type TDatei = file of TPerson; var dateivar : TDatei; Die Dateivariable dateivar speichert Informationen wie den Dateinamen (DOS-Name) und darüber, ob die Datei geöffnet ist oder nicht (zum Lesen, Schreiben geöffnet oder geschlossen). Der Dateiname ist eine Zeichnekette, wie z.b. 'Personenliste.dat'. Eine andere Deklarationsmöglichkeit: type TDatei = record dateivar : file of TPerson; dateiname : string; end; Welche Deklarationsart man nutzt, ist m.e. Geschmackssache.
Dateioperationen (Delphi)- Pascal Bedeutung procedure assignfile (var dateivar; dateiname); - ordnet der Dateivariablen den DOS- Bezeichner (dateiname) der Datei zu - muss vor dem Öffnen der Datei ausgeführt werden - das Ansprechen der datei erfolgt nun immer unter Verwendung der Dateivariablen procedure rewrite (var dateivar); - erzeugt auf dem Datenträger eine leere Datei mit dem durch assignfile zugeordneten Dateinamen - existiert die Datei bereits, so geht der Dateiinhalt verloren - in die Datei kann geschrieben werden procedure reset (var dateivar); - öffnet eine auf dem Datenträger existierende Datei zum Lesen und Schreiben - der Satzzeiger verweist auf den ersten Datensatz (Satznummer 0) procedure write (var dateivar; datensatz) - schreibt einen Datensatz datensatz in die Datei dateivar an die aktuelle Satzzeigerposition - der Satzzeiger rückt um eine Position weiter procedure read (var dateivar; datensatz) - liest einen Datensatz aus der Datei dateivar, von aktueller Satzzeigerposition in die Variable datensatz - der Satzzeiger rückt um eine Position weiter procedure seek (var dateivar; position); - setzt den Satzzeiger der Datei dateivar auf den Datensatz mit der durch position angegebenen Satznummer function eof (var dateivar):boolean; - liefert Funktionswert vom Typ boolean - TRUE, falls der Satzzeiger auf das Dateiende weist, sonst FALSE function filepos (var dateivar):integer; - liefert einen ganzzahligen Wert die aktuelle Satzzeigerposition function filesize (var dateivar) - liefert die Anzahl der in der Datei gespeicherten Datensätze procedure closefile (var dateivar); - schließt die Datei dateivar procedure erase (var dateivar); - löscht die Datei, die der Dateivariablen dateivar zugeordnet ist auf dem Datenträger - die Datei muss vorher geschlossen werden procedure rename (var dadteivar; neuername); - die mit dateivar verbundene Datei erhält den Dateinamen der mit neuername (Zeichenkette) übergeben wird
Weitere Beispiele für allgemeine Dateien: type TGanzzahlDatei = file of integer; TDezimalzahlDatei = file of real; TReihung = array[1..9] of byte; TreihungDatei = file of TReihung; TMenge = set of char; TMengeDatei = file of TMenge; TVerbund = record zahl:real; wahrheit:boolean; zeichen:char; zeichenkette:string[10]; end; TVerbundDatei = file of TVerbund;
2. Textdateien enthalten ASCII-Zeichen (druckbare Zeichen, Steuerzeichen) durch die Steuerzeichen #13#10 (Wagenrücklauf CR, Zeilenvorschub LF) kann eine Zeilenstruktur der Textdatei erreicht werden Deklaration Dateivariable: var txtdateivar : textfile; Die Dateivariable txtdateivar speichert Informationen wie den Dateinamen (DOS-Name) und darüber, ob die Datei geöffnet ist oder nicht (zum Lesen, zum Schreiben, zum Anfügen geöffnet oder geschlossen). Der Dateiname ist eine Zeichnekette, wie z.b. 'Personenliste.txt'. Das Kürzel 'txt' muss nicht zwingend verwendet werden. Veranschaulichung Inhalt einer Textdatei: 'Inhaltder Textdatei#9mit Tabulatorschritt#13#10neuer Zeile.#13#10Und noch ner Zeile.gefolgt von einer Leerzeile#13#10#13#10Dann ist die Datei zuende.' Anzeige in einem Editor: Inhaltder Textdatei mit Tabulatorschritt neuer Zeile. Und noch ner Zeile.gefolgt von einer Leerzeile Dann ist die Datei zuende. Die Datei (beispiel.csv): Meier;Willi;12.01.1991;#13#10 Hansen;Hans;12.01.1991;#13#10
Dateioperationen (Delphi)- Pascal Bedeutung procedure assignfile (var dateivar; dateiname); - ordnet der Dateivariablen den DOS- Bezeichner (dateiname) der Datei zu - muss vor dem Öffnen der Datei ausgeführt werden - das Ansprechen der datei erfolgt nun immer unter Verwendung der Dateivariablen procedure rewrite (var dateivar); - erzeugt auf dem Datenträger eine leere Datei mit dem durch assignfile zugeordneten Dateinamen - existiert die Datei bereits, so geht der Dateiinhalt verloren - in die Datei kann nur geschrieben werden procedure reset (var dateivar); - öffnet eine auf dem Datenträger existierende Datei NUR zum Lesen - der Satzzeiger verweist auf das erste Zeichen procedure append (var dateivar); - öffnet Textdatei zum Anfügen von Zeichen oder Zeichenkette - Satzzeiger steht auf Dateiende procedure write (var dateivar; zeichenkette); procedure write (var dateivar; zeichen); - schreibt den Wert von Zeichenkette- oder Zeichen- in die Datei txtdateivar an die aktuelle Satzzeigerposition - der Satzzeiger steht hinter dem letzten procedure writeln (var dateivar; zeichenkette); procedure writeln (var dateivar; zeichen); lies: writeline procedure read (var dateivar; zeichenkette); procedure read (var dateivar; zeichen); procedure readln (var dateivar; zeichenkette); lies: readline geschriebenen Zeichen - schreibt den Wert von Zeichenkette- oder Zeichen- in die Datei txtdateivar an die aktuelle Satzzeigerposition und fügt einen Wagenrücklauf- Zeilenvorschub hinzu schreibt also eine Textzeile in die Datei - liest eine Zeichenkette oder ein Zeichen aus der Datei txtdateivar, von aktueller Satzzeigerposition in die Variable zeichenkette bzw. zeichen - der Satzzeiger hinter dem zuletzt gelesenen Zeichenz - liest eine Zeichenkette (Textzeile) aus der Datei txtdateivar, von aktueller Satzzeigerposition in die Variable zeichenkette - der Satzzeiger am Beginn der nächsten Textzeile, also nach den Zeichen #13#10 (CR, LF) function eof (var dateivar):boolean; - liefert Funktionswert vom Typ boolean - TRUE, falls der Satzzeiger auf das Dateiende weist, sonst FALSE procedure closefile (var dateivar); - schließt die Datei txtdateivar procedure erase (var dateivar); - löscht die Datei, die der Dateivariablen dateivar zugeordnet ist auf dem Datenträger - die Datei muss vorher geschlossen werden procedure rename (var dadteivar; neuername); - die mit dateivar verbundene Datei erhält den Dateinamen der mit neuername (Zeichenkette) übergeben wird