Zur Wiederholung:
Bei der Deklaration einer Variablen muß stets ein Datentyp für diese angegeben werden. Unter Turbo Pascal gibt es verschiedene Datentypen, z.B.:
Abbildung in dieser Leseprobe nicht enthalten
Soll ein String keine 255 Zeichen beinhalten, sondern weniger, kann man die maximale Länge in [eckigen] Klammern angeben. Beispiel:
Abbildung in dieser Leseprobe nicht enthalten
Der Datentyp Record
Nun kann man auch verschiedene Datentypen zu einem einzigen Typen kombinieren. Diese kombinierten Felder heißen Record. Record-Datentypen werden in einem Type-Abschnitt, der vor dem Var-Abschnitt steht, definiert:
Abbildung in dieser Leseprobe nicht enthalten
Man kann nun eine Variable vom Typ „Datensatz“ im Var-Abschnitt deklarieren:
Abbildung in dieser Leseprobe nicht enthalten
Ist „Person“ nun als Variable vom Typ Adresse deklariert, kann man die einzelnen Felder wie folgt ansprechen: Person.Tel, Person.Name, Person.ProblemNr, ...
Hier ein Beispiel für ein Programm:
Abbildung in dieser Leseprobe nicht enthalten
Sind in einem Programmstück viele Zugriffe auf die Felder einer Record-Variable erforderlich, so läßt sich das mit der WITH-Anweisung vereinfachen. Man erspart sich also die ständige Angabe des Präfixes „Person.“:
Abbildung in dieser Leseprobe nicht enthalten
Arbeiten mit Dateien
Eine Datei ist gemäß Definition die „Bezeichnung für eine nach bestimmten Gesichts- punkten zusammengestellte Menge an Daten.“ (Duden Informatik). Für Pascal ist also auch der Bildschirm nur eine Datei. In diese „Datei“ kann Pascal Schreiben (mit dem Befehl WRITE) und Lesen (mit READ) wie aus jeder anderen Datei auch.
Uns geht es an dieser Stelle aber um Dateien, die auf einem Medium (Festplatte, Diskette, CD) liegen.
Pascal benötigt eine sogenanntes „ File-Handle “ um mit einer Datei zu arbeiten. Das ist eine Variable, die von dem speziell für diesen Zweck geschaffenen Typen FILE sein muß1. Dahinter muß angegeben werden, von welchem Typ die Daten sind, die in die Datei gespeichert werden soll. Die Deklaration für eine Datei, in die Integer- Zahlenwerte geschrieben werden sollen, könnte somit wie folgt aussehen:
Abbildung in dieser Leseprobe nicht enthalten
Bevor auf die Datei zugegriffen wird, muß sie geöffnet werden. Dies geschiet in Pascal in zwei Schritten: zunächst muß eine Verbindung zwischen der Dateivariablen und dem Dateinamen hergestellt werden (mit dem Befehl ASSIGN):
Abbildung in dieser Leseprobe nicht enthalten
Danach muß dem Betriebssystem MS-DOS mitgeteilt werden, daß im folgenden Zugriffe auf die Datei erfolgen sollen. Das wird mit den Befehlen REWRITE oder RESET realisiert.
REWRITE (Handle);
Öffnet die Datei so, daß anschließend Daten hineingeschrieben werden können. Existiert bereits eine Datei mit dem gleichen Namen, wird sie vorher gelöscht (!). Existiert noch keine Datei mit diesem Namen, wird eine leere Datei erstellt.
RESET (Handle);
Öffnet eine bestehende Datei ohne sie zu löschen. Besteht die Datei vorher noch nicht, gibt es eine Fehlermeldung und das Programm wird beendet.
Die Generierung dieser Fehlermeldung kann durch einen sogenannten Compilerbefehl unterdrückt werden. Vom Programmierer kann dann in der pascaleigenen Variable IOResult abgefragt werden, ob das Öffnen der Datei mit RESET erfolgreich war. Der Befehl lautet $I- zum Ausschalten der Fehlergenerierung durch den Compiler und $I+ um sie wieder anzuschalten, was sicherhaltshalber nicht vergessen werden sollte. Dabei ist zu beachten, daß Compilerbefehle2 immer in {geschweiften} Klammern stehen müssen.
Ein Programm also, das eine bestehende Datei öffnet ohne sie zu löschen und in dem Fall, daß die Datei noch nicht besteht eine neue erstellt, könnte wie folgt aussehen:
Abbildung in dieser Leseprobe nicht enthalten
Der CLOSE-Befehl schließt die geöffnete Datei wieder. Er muß unbedingt aufgerufen werden, bevor das Programm beendet wird, ansonsten können Daten unvorhersehbar verloren gehen und die Datei kann fehlerhaft sein.
Wie arbeitet man nun mit einer geöffneten Datei?
Ganz einfach werden die Daten mit
Abbildung in dieser Leseprobe nicht enthalten
in die Datei geschrieben und mit
Abbildung in dieser Leseprobe nicht enthalten
Die Daten werden immer an die Position geschrieben bzw. von der Position gelesen, an der der Dateizeiger momentant steht. Zur Veranschaulichung hier ein Beispiel einer Datei in die die 4 Zeichenketten „Bart“, „Lisa“, „Marge“ und „Homer“ geschrieben wurden:
Abbildung in dieser Leseprobe nicht enthalten
Wobei Position 4 noch nicht existiert / leer ist
Wie gesehen liefert die Funktion FILESIZE(Handle) die Größe der Datei zurück (Wert vom Typ LongInt). Die Größe wird als die Anzahl der Datensätze, die in der Datei gespeichert sind, definiert. Die entspricht i.d.R. nicht der von MS-DOS angegeben Größe in Bytes.
Die Funktion FILEPOS(Handle) gibt nun die Position des Dateizeigers an.
Würde z.B. der Wert 2 geliefert, würde bei der nächsten READ-Anweisung die Zeichenkette „Marge“ gelesen.
Der Dateizeiger wird nach einem Zugriff von READ oder WRITE automatisch um 1 erhöht.
Nach dem Einlesen von „Marge“ steht der Dateizeiger also auf 3. Ein READ-Befehl würde uns nun „Homer“ liefern. Danach steht der Dateizeiger auf 4 und das Dateiende ist erreicht (d.h. FILEPOS (Handle) = FILESIZE(Handle) ). Wenn jetzt ein READ-Befehl gemacht wird, liefert das Programm eine Fehlermeldung. Stattdessen können nun mit WRITE neue Datensätze angehängt werden.
Achtung: Nach dem Öffnen einer Datei mit REWRITE oder RESET steht der Dateizeiger stets auf Null.
Mit dem Befehl SEEK(Handle, Position) wird der Dateizeiger auf den Datensatz mit dem Index „Position“ gesetzt. Mit
SEEK(Handle, FILESIZE(Handle))
springt man demnach an das Ende der Datei und man kann neue Datensätze anhängen.
Abbildung in dieser Leseprobe nicht enthalten
[...]
1 Es gibt auch noch den Typ „TEXT“ für Textdateien, auf den ich aber nicht weiter eingehe
2 Compilerbefehle sind Befehle, die bei der Ausführung des Programmes nicht bearbeitet werden (so geschiet es bei normalen Befehlen). Deswegen stehen sie auch in geschweiften Klammern genauso wie ein Kommentar, das ebenfalls nicht bearbeitet wird. Stattdessen werden sie während der Compilierung (Erzeugung des für den Computer lesbaren Maschinencodes) beachtet.
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen.