Читать книгу LearnPasLin - null hagbard123 - Страница 5
Dateiverarbeitung
ОглавлениеVariablen im Arbeitsspeicher sind äußerst flexibel, sie haben nur einen großen Nachteil: sie "überleben" eine Programmbeendigung nicht.
Wäre doch praktisch, wenn man Sie irgendwo speichern könnte! Vielleicht in einer Datei auf der Festplatte ...
Unter Pascal Dateien anzusprechen ist sehr einfach.
Mit einigen wenigen Befehlen können Sie schon Binär- und Textdateien verarbeiten, von ihnen lesen und in sie schreiben.
Öffnen einer Datei
Zuerst müssen Sie dem System die zu öffnende Datei bekannt geben.
Das geschieht mit dem Befehl assign.
Diese Anweisung erwartet zwei Parameter: ein sogenanntes "Datei-Handle" und einen Dateinamen inkl. Pfadangabe.
Das Dateihandle ist eine Variable von Typ text (für Textdateien) oder von Typ "file of Typ", wobei "Typ" ein beliebiger Datentyp sein kann.
..... VAR textDatei:text; intDatei:file of integer; begin assign(textDatei,'readme.txt'); assign(intDatei,'A:\datei.dat'); ..... Die Anweisung assign verbindet einen Dateinamen mit einem Handle. Dabei wird allerdings NICHT überprüft, ob die Datei existiert!
Nach der Ausführung von assign können Sie die Datei öffnen. Dazu müssen Sie einen der beiden Befehle reset oder rewrite ausführen. Beide verlangen als Parameter ein Dateihandle. reset öffnet die Datei; gibt es die Datei nicht, erhalten Sie eine Fehlermeldung. Bei einer noch nicht existierenden Datei müssen Sie rewrite verwenden. Dieser Befehl öffnet ebenfalls die Datei. Wenn sie schon besteht wird sie gnadenlos überschrieben; existiert sie noch nicht, wird sie neu angelegt.
Schließen einer Datei
Wenn Sie alle Schreib- und Leseoperationen beendet haben, sollten Sie die Datei schließen. Dies ist wichtig, um sicherzustellen, das sich Daten nicht noch in einem System-Puffer befinden, sondern dass wirklich alle Daten in die Datei geschrieben wurden. Die Anwendung ist einfach: "close(Dateihandle);". Das Beispiel dazu finden Sie etwas weiter unten ("Lesen einer Datei").
Schreiben in eine Datei
ACHTUNG: Passen Sie auf, in welche Datei Sie schreiben! Pascal überschreibt (falls Sie es "befehlen") gnadenlos!
Egal, ob Sie jetzt mit einer binären oder mit einer textuellen Datei arbeiten, können Sie mit dem write(ln) Werte in die Datei schreiben. Erinnern Sie sich noch an den Abschnitt über Drucker? Dort mussten Sie bei einer Ausgabe auf den Drucker als ersten Parameter "lst" angeben. Klingelts? Könnte das vielleicht so eine Art Handle gewesen sein? Ja, es ist so. Wollen Sie also in eine Datei schreiben, geben Sie als ersten Parameter das Dateihandle an. Als weitere Parameter geben Sie dem Datentyp des Dateihandels entsprechende Werte bzw. Variablen an, die Sie in die Datei schreiben möchten.
Dabei müssen Sie auf eines achten: Wenn Sie in eine Datei lauter integer-Zahlen speichern, diese Datei schließen, als char-Datei wieder öffnen und auslesen, bekommen Sie lauter Sch.....öne, aber nichtssagende ASCII-Zeichen. Eine binäre integer-Datei sollte also immer nur als solche gelesen und geschrieben werden, und nicht als char oder gar text-Datei geöffnet werden.
Bei einer Textdatei sind Sie nicht an Datentypen gebunden. Wenn Sie in eine Textdatei die Zahl "12345" speichern, wird diese nicht als 2-Byte-Integer dort gespeichert, sondern als die ASCII-Zeichen "1", "2", "3", "4" und "5". Danach können Sie einen String, eine Byte-Zahl, etc. speichern. Sie müssen nur aufpassen, dass die Werte (Datentypen) in der selben Reihenfolge wieder ausgelesen werden, sonst wird der String als Zahl und die Zahl als Wahrheitswert interpretiert :-).
program schreibeIntegerDatei; uses crt; var i:integer; datei:file of integer; begin assign(datei,'text.dat'); rewrite(datei); for i:= 1 to 10 do begin write(datei,i); end; close(datei); end.
Es werden alle Zahlen von 1 bis 10 binär in die Datei geschrieben. Ersetzten Sie in dem Beispiel ruhig einmal das "file of integer" durch "text", und schreiben Sie in eine andere Datei (zB. "text2.txt"). Dann vergleichen Sie mit einem Text- oder Hexeditor die beiden Dateien. Lesen aus der Datei Mit der bekannten read(ln) Anweisung können Sie Daten aus einer Datei lesen. Am besten sieht man das im folgenden
program leseIntegerDatei; uses crt; var i,zahl:integer; datei:file of integer; begin assign(datei,'text.dat'); reset(datei); clrscr; for i:= 1 to 10 do begin read(datei,zahl); write('Der ',i,'. Wert ist: ',zahl); end; close(datei); end.