Schreiben und Lesen Die Dateitypen

Object Pascal im Detail - Dateien www.delphi-treff.de 115

4.11.4.2. Schreiben und Lesen

Zum Schreiben in typisierten Dateien bietet Delphi uns Write an. Parameter sind neben der Dateivariablen mindestens eine Variable des Datentyps. Da Textdateien zeilenorientiert sind, gibt es hier zusätzlich WriteLn, das nach dem Schreiben durch Write einen Zeilenumbruch der Datei anfügt. Anders als in typisierten Dateien kann hier als zweiter Parameter auch eine Konstante übergeben werden. Das Einlesen der Daten mir Read und ReadLn verhält sich analog zum Schreiben - bis auf die Konstante. var TypisierteDatei: file of Byte; procedure SchreibeDatei; var i: Integer; begin AssignFileTypisierteDatei, FN; RewriteTypisierteDatei; for i := 1 to 10 do WriteTypisierteDatei, i; implizite Typumwandlung CloseFileTypisierteDatei; end; procedure LeseDatei; var wert: Byte; begin AssignFileTypisierteDatei, FN; ResetTypisierteDatei; while not EofTypisierteDatei do solange nicht Dateiende erreicht ist begin ReadTypisierteDatei, wert; WriteLnwert; Ohne Dateiparamater=Ausgabe auf Konsole end; CloseFileTypisierteDatei; end; begin SchreibeDatei; LeseDatei; ReadLn; Wartet auf Eingabe end. Das Programm ist in zwei Prozeduren aufgeteilt, die das Schreiben und Lesen der 10 Werte erledigt. Interessant in der Write-Zeile sind die unterschiedlichen Typen. Vorhanden ist ein Integer, die Datei ist aber vom Typ Byte. Hier findet also eine implizite Typumwandlung statt, denn maßgebend ist immer der Datentyp der Datei. Vor solchen Umwandlungen - von groß nach klein - sollte man sich hüten Falls der Wertebereich überschritten Object Pascal im Detail - Dateien www.delphi-treff.de 116 wird, ist die Umwandlung verlustbehaftet oder fehlerhaft. Neu ist die boolsche Funktion Eof, die dann True zurück gibt, wenn das Dateiende erreicht ist. Bei untypisierten Dateien ist die Handhabung etwas komplizierter, da der Inhalt der Datei nicht strukturiert sein muss. Diese Dateien werden mit BlockWrite geschrieben und durch BlockRead gelesen. Zusätzliche Parameter sind hier eine Variable, aus der gelesen bzw. in die geschrieben wird und die Anzahl der Datensätze pro Lese- und Schreibvorgang. Diese Anzahl steht in direkter Verbindung zur optionalen Blockgröße in Reset bzw. Rewrite und bestimmt die Menge an Daten, die pro Lese- oder Schreibzugriff verarbeitet werden. Wir nehmen die gerade erzeugte typisierte Datei und lesen sie in Blöcken zu einem Byte aus: procedure LeseDatei; var untypisierteDatei: file; buffer: Byte; begin AssignFileuntypisierteDatei, FN; ResetuntypisierteDatei, 1; Blockgröße = 1 while not EofuntypisierteDatei do begin BlockReaduntypisierteDatei, buffer, SizeOfByte; SizeOfByte = 1 WriteLnbuffer; end; end;

4.11.4.3. Der Dateizeiger