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....

Der Umgang mit Textdateien

Textfiles unterscheiden sich in der Handhabung etwas von binären Files, da Textfiles keine fixe Recordgröße aufweisen und dadurch nur ein sequentieller Zugriff möglich ist. Man kann für Textfiles den Filepointer also nicht auf eine bestimmte Zeile setzen.

Textfiles werden vom Laufzeitsystem in einer speziellen Art interpretiert: jedes Textfile wird als Folge von Zeichen interpretiert, die zu Zeilen zusammengefasst sind; das Zeilenende wird durch eine spezielle Zeichenkombination (ein "carriage return" Zeichen (ASCII 13) gefolgt von einem optionalen "line feed" Zeichen (ASCII 10) markiert.

Bei Textfiles haben die Prozeduren Read und Write eine spezielle Funktion, bei der Werte direkt in die entsprechenden Zeichenkombination (und umgekehrt) umgeformt werden. So kann man zum Beispiel mit dem Kommando read (FVar, Wert1, Wert2); die nächsten zwei Werte aus dem File FVar einlesen. Man braucht also nicht den Umweg über einen Hilfsstring gehen, in den man zuerst die Zeichen einliest und dann daraus die Variablen Wert1 und Wert2 extrahiert.

Für Textfiles gibt es zwei spezielle Versionen von read und write, nämlich readln und writeln, die nicht nur die nächsten Zeichen einlesen, sonder prinzipiell immer bis zum nächsten Zeilenende lesen. Damit lassen sich Textfiles zeilenweise einlesen. Die Zuordnung zu den Variablen erfolgt nach der Reihenfolge im Aufruf.

Beispiel: Das folgende Beispiel zeigt, wie man mehrer Werte pro Zeile einliest:
var
  InFile : TextFile;
  Wert1  : integer;
  Wert2  : double;
  Wert3  : double;
  Rest   : string;

begin
assignFile (Infile, 'MeineDatei.txt');
reset (Infile);
while not eof (InFile) do
  begin
  readln (InFile, Wert1, Wert2, Wert3, Rest);

    // an dieser Stelle werden die eingelesenen Variablen verarbeitet

  end;
CloseFile (InFile);
end;
Die Prozedur liest pro Zeile drei Werte ein, restlicher Text wird in den String "Rest" eingelesen.

 

Last Update: 2008-09-09