ASSIGN-Klausel

Die ASSIGN-Klausel bildet die Verbindung zwischen dem, nach der SELECT-Klausel vergebenen logischen Dateinamen und der tatsächlichen Datei. Das Wort TO ist ein Wahlwort. Der Name der tatsächlichen Datei wird inklusive Pfad in Anführungzeichen gesetzt. Fehlt die Pfadangabe, so wird im Standardverzeichnis gesucht.

SELECT Datintern ASSIGN TO "C:/Daten/Datei.dat".

Soll eine Druckdatei definiert werden, so gibt es zum einen die 'Offline-Methode' mit Hilfe von LINE ADVANCING oder die 'Online-Methode', bei der der Drucker direkt (PRINTER, LPT, LPT1, ...) angesprochen wird.
Im ersten Fall wird die Datei automatisch mit einzeiligem Vorschub ausgegeben, ohne daß der Zusatz AFTER 1 LINES verwendet wird.

SELECT Druckintern ASSIGN LINE ADVANCING "C:/Daten/Datei.dat".

Bei der zweiten Methode, in der der Drucker direkt angesprochen wird, muß der AFTER-Zusatz verwendet werden um einen Zeilenvorschub zu erreichen und der Drucker muß bei Ausführung einer OPEN oder WRITE-Anweisung online zur Verfügung stehen:

SELECT Druckintern ASSIGN TO PRINTER.

Die ASSIGN-Klausel läßt die weiteren Zusätze und Einträge zu:

RESERVE-Eintragung
Mit dieser Eintragung wird die Anzahl der E/A-Puffer festgelegt. Da die Pufferung heutzutage jedoch vom Betriebssystem vorgenommen wird, kann dieser Eintrag weggelassen werden bzw. er wird als Kommentar betrachtet.

ORGANIZATION IS ...
Mit dieser Eintragung wird die Organisationsform der Datei angegeben. Fehlt diese Eintragung, so wird SEQUENTIAL angenommen.
Für sequentielle Dateien kann hier zwischen SEQUENTIAL und LINE SEQUENTIAL gewählt werden. Zu beachten ist dabei, daß bei LINE SEQUENTIAL-Speicherung das COMP- oder COMP-3-Speicherformat nicht zur Anwendung kommen darf, da es sonst zu Fehlern beim Lesen kommt.
Handelt es sich um eine index-sequentielle Datei, deren Organisationsform spezifiziert werden soll, so ist 'ORGANIZATION IS INDEXED' anzugeben.
Liegt eine relative Datei vor, so ist 'ORGANIZATION IS RELATIVE' zu verwenden.

ACCESS MODE-Klausel
Hier wird die Verarbeitungsart bzw. der Zugriffsmodus angegeben. Wurde als Organisationsform SEQUENTIAL gewählt oder die ORGANIZATION-Eintragung garnicht vorgenommen, so kann die ACCESS-Klausel auch entfallen, da solcherlei Dateien eben nur sequentiell verarbeitet werden können.
Wird eine index-sequentielle Datei oder eine relative Datei verarbeitet, so ist als Zugriffsmodus neben SEQUENTIAL entweder RANDOM oder DYNAMIC erlaubt. Im ersten Fall kann ein wahlfreier Zugriff auf einzelne Sätze der index-sequentiellen Datei mit Hilfe der Schlüsselvergabe realisiert werden.
Soll eine Datei sowohl wahlfrei als auch sequentiell verarbeitet werden, so ist als Organisationsform DYNAMIC anzugeben.

RECORD und ALTERNATE RECORD KEY-Klausel
Ein wahlfreier Zugriff auf eine Datei kann nur mit Hilfe eines Schlüssels realisiert werden. Unbedingt angegeben werden muß der Primärschlüssel oder RECORD KEY. Das entsprechende Schlüsselfeld kann in einem elementaren Datenfeld, einem Gruppenfeld oder mehreren Datenfeldern (= Split-Key MF-Cobol) definiert werden.
Daneben können auch Sekundärschlüssel oder ALTERNATE RECORD KEY's angegeben werden. Auch sie können in elementaren Datenfeldern, Gruppenfeldern oder als Split-Keys (MF-Cobol) definiert werden.
Handelt es sich um einen klassifizierenden Sekundärschlüssel, sodaß der Schlüssel mehrfach in der Datei auftaucht, so ist der WITH DUPLICATES-Zusatz zu verwenden.

RELATIVE KEY
Liegt eine relative Datei vor, so wird hier der benötigte 'Schlüssel' angegeben. Das Wort Schlüssel ist hier mit Vorsicht zu genießen, da es sich nicht um einen Schlüssel im Sinne indexsequentieller ISAM-Dateien handelt. Vielmehr wird in dem, hinter RELATIVE KEY IS angegebenen Datenfeld die Satznummer definiert. Daher muß die Angabe auch als vorzeichenlose Ganzzahl beschrieben werden. Das angegebene Datenfeld darf nicht in der Satzbeschreibung der Datei vorhanden sein sondern muß gesondert beschrieben werden.

LOCK MODE-Klausel
Diese Klausel wird bei einer Multiuser-Umgebung verwandt.

FILE STATUS-Klausel
Es ist immer praktisch, wenn man bei Schreib-/Leseoperationen hinterher abfragen kann, wie die Operation denn so gelaufen ist (Patient tot - Arzt reich!). Hierfür gibt es das FILE STATUS-Feld. In diesem zwei Byte langen Feld hinterlegt das Betriebssystem nach jeder Operation einen Fehlercode (... auch wenn alles glatt gegangen ist). Damit das Betriebssystem aber solche Sachen machen kann, ist es nötig, das entsprechende Feld in der WORKING-STORAGE SECTION auch als zwei Bytes langes Feld zu definieren. Dieses Feld kann man dann nach entsprechenden Operationen abfragen und so evtl. auftretende Fehler zu analysieren. Sollte ein Betriebssystemfehler auftreten, so wird im ersten Byte des Fehlercodes eine 9 vermerkt. Darauf folgt eine dreistellige Zahl (binäres Format) im zweiten Byte. Will man den Fehlercode auf den Bildschirm bringen, so ist darauf zu achten, daß der Code in ein entsprechendes Format übertragen wird.

SELECT Datintern ASSIGN TO "C:/Daten/Datei.dat" FILE STATUS IS Lesecode.

Für den Fall, daß der Drucker benutzt werden soll, jedoch nicht zur Verfügung steht, wird beispielsweise der Fehlercode "9-005" (angesprochene Einheit steht nicht zur Verfügung) im FILE STATUS-Feld auftauchen, sofern es angegeben wurde. Ein Programmabbruch kann also durch die Verwendung der FILE STATUS-Klausel verhindert werden.

...