Der Epina Delphi-Kurs bietet Ihnen eine allgemeine Einführung in das Programmieren mit Delphi/Pascal. Mit vielen ausgearbeiteten Beispielen können Sie direkt in die Delphi-Programmierung einsteigen. Mehr dazu finden Sie hier....

Syntax von Dateizugriffen

Der Zugriff auf ein File erfolgt immer nach demselben Schema: Zuerst muss dem Betriebssystem mitgeteilt werden, welches File bearbeitet werden soll; darauf muss das File geöffnet werden und erst dann kann man mit ihm arbeiten. Am Ende muss das File auch wieder geschlossen werden. Der Mechanismus des Öffnens und Schließens dient dazu, dem Betriebssystem zu ermöglichen, die entsprechenden Puffer und Datenstrukturen anzulegen, um den Zugriff auf ein File möglichst effizient zu machen. So wird zum Beispiel beim Schreiben auf eine Datei, die Harddisk nicht wirklich sofort in Bewegung gesetzt, sondern das Betriebsystem schreibt die Daten zuerst in einen Zwischenspeicher ("Puffer") und signalisiert dem aufrufenden Programm, dass die Daten gespeichert sind. Damit wird das aufrufende Programm nicht durch die langsame Harddisk gebremst. Das Betriebssystem schreibt dann die Daten zu einem späteren Zeitpunkt auf die Platte (das wird für den Benutzer transparent und im Hintergrund gemacht).

Wie schon erwähnt, erfolgt der Zugriff auf eine Datei über ihren Namen. Technisch gesehen wird dabei der Dateiname mit einer sogenannten "Filevariablen" assoziiert, die für den Programmierer unsichtbar die nötigen Detailinformationen über das File enthält. Die Filevariable wird durch die Schlüsselwörter "file of" und den Typ des File-Records definiert. Zusätzlich zur Filevariablen benötigt man aber noch eine Transfervariable vom Typ des File-Records, die zum Austausch der Daten zwischen File und Programm dient.

Beispiel: Das folgende Beispiel zeigt die notwendigen Deklarationen um auf ein File zugreifen zu können. Zuerst muss der Typ des Dateirecords definiert werden, in dem die Struktur des Records beschrieben wird. Angenommen, wir möchten Namen, Körpergröße und Gewicht mehrerer Personen in einer Datei speichern, so könnte der passende Record folgendermaßen aussehen:
type
  TFPerson = record                // Datentyp
               Name       : string;
               Height     : double;
               Weight     : double;
             end;
Um nun tatsächlich auf das passende File zugreifen zu können, benötigt man noch eine Austauschvariable und eine Filevariable:
var
  PersonData  : TFPerson;          // Austauschvariable
  MyFile      : file of TFPerson;  // Filevariable

 

Die folgende Tabelle zeigt den Zugriff auf ein File im Einzelnen; es sind allerdings nur die am häufigsten benötigten Dateibefehle angeführt:

Schritt Pascal Befehle Erklärung
1.
Zuordnung
assignfile (filevar, name); Mit AssignFile wird festgelegt, welche Filevariable welchem Filenamen zugeordnet wird.
2.
Öffnen
rewrite (filevar);
reset (filevar);
append (filevar);
Beim Öffnen des Files muss man sich entscheiden, ob man ein neues File anlegen (rewrite), auf ein bestehendes zugreifen (reset), oder an ein bestehendes File etwas anhängen (append) möchte (append funktioniert allerdings nur bei Textdateien).
3.
Zugriff
read (filevar, ....);
write (filevar, ...);
seek (filevar, pos);
eof(filevar);
Der Zugriff auf einzelne Records erfolgt mit Hilfe der Prozeduren read und write (für Textfiles gibt es auch die Möglichkeit mit readln und writeln ganze Zeilen zu lesen bzw. zu schreiben). Der Filepointer kann mit dem Aufruf von seek eingestellt werden. Die Funktion eof ("end of file") liefert TRUE zurück, falls der Filepointer das Ende eines Files erreicht hat.
4.
Schließen
closefile (filevar); Damit wird das jeweilige File geschlossen, d.h. die Information, die sich noch in Puffern befindet, wird auf die Platte geschrieben. ACHTUNG: Vergisst man auf das Schließen eines Files, so kann (und wird) es vorkommen, dass Teile der Daten verloren gehen (da ja der Inhalt des Filepuffers nicht auf die Platte geschrieben wird).

Beispiel: Der folgende Code-Ausschnitt zeigt einen typischen File-Zugriff; dabei werden sequentiell alle Records einer Datei gelesen und manche auf eine andere Datei ("OutFile") geschrieben:
type
  TData = record                        // Datentyp
            cnt     : integer;
            x       : double;
            y       : double;
          end;

var
  InFile   : file of TData;             // Filevariable
  MyData   : TData;                     // Austauschvariable

begin
assignfile (InFile, 'meinedaten.dat');  // Eingangsdatei definieren
assignfile (OutFile, 'ergebnis.dat');   // Ergebnisdatei
reset (InFile);                         // Eingangsdatei öffnen
rewrite (OutFile);                      // Ergebnisdatei neu erzeugen
while not eof(InFile) do                // solange das Ende der Eingangsdatei
  begin                                 //      nicht erreicht ist...
  read (InFile, MyData);                // lies einen Record
  if MyData.Cnt > 0 then                // falls die Variable "Cnt" größer
    write (OutFile, MyData);            //      als 0, wird der Record in die
  end;                                  //      Ergebnisdatei geschrieben
closefile (InFile);                     // Eingangsdatei schließen
closefile (OutFile);                    // Ergebnisdatei schließen
end;

Last Update: 2008-09-09