Für jede Datei, die ein COBOL-Programm bearbeiten soll, wird in der SELECT-Klausel (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [ 1]) ein (programminterner) Name festgelegt, auf den sich die COBOL-Anweisungen für diese Datei beziehen. Bei Programmablauf muss jedem dieser Dateinamen eine aktuelle Datei zugewiesen sein.
Diese Zuweisung lässt sich vor dem Aufruf des Programms durch ein ADD-FILE-LINK- bzw. ein ASSIGN-systemdatei-Kommando herstellen. Welches der beiden Kommandos zu verwenden ist, hängt vom Eintrag in der ASSIGN-Klausel (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [1]) der Datei ab. Ist explizit keine Datei zugewiesen, werden Voreinstellungen des Programms wirksam, die bei der Übersetzung erzeugt wurden. Die einzelnen Möglichkeiten der Dateizuweisung sind im Folgenden zusammengestellt:
Zuweisung über das ADD-FILE-LINK-Kommando
Die Zuweisung über das ADD-FILE-LINK-Kommando kann nur erfolgen, wenn in der ASSIGN-Klausel der Dateikettungsname (Linkname) der Datei in der Form „literal“ oder „datenname“ angegeben ist. Mit „literal“ wird der Linkname programmstatisch angegeben. Im Datenfeld „datenname“ kann der Linkname dynamisch, also während des Programmablaufs veränderbar, angegeben werden.
Um eine katalogisierte Datei zuzuweisen, muss der Anwender für diese Datei vor dem Programmaufruf ein ADD-FILE-LINK-Kommando absetzen, in dessen LINK-NAME-Operanden er den vereinbarten Linknamen angibt. Mit Hilfe weiterer Operanden des ADD-FILE-LINK-Kommandos können damit zugleich auch Dateimerkmale festgelegt werden.
Jeder Linkname muss den Anforderungen des BS2000 an einen Linknamen genügen (siehe dazu Handbuch [4]), d.h. insbesondere,
er muss alphanumerisch sein,
er darf aus höchstens acht Zeichen bestehen und
darf keine Kleinbuchstaben enthalten.
Beispiel 9-1
Zuweisung einer katalogisierten Datei über das ADD-FILE-LINK-Kommando
|
Bei COBOL-Programmen mit SORT (siehe Kapitel „Sortieren und Mischen") sind folgende Linknamen für das Dienstprogramm SORT reserviert und stehen für andere Dateien nicht zur Verfügung:
MERGEnn (nn=01,...99)
SORTIN
SORTINnn (nn=01,...99)
SORTOUT
SORTWK
SORTWKn (n=1,...9)
SORTWKnn (nn=01,...99)
SORTCKPT
Eine Dateizuweisung bleibt so lange bestehen, bis sie
entweder explizit durch ein REMOVE-FILE-LINK-Kommando oder implizit durch das Task-Ende gelöscht oder
durch ein nachfolgendes ADD-FILE-LINK-Kommando geändert wird.
Darauf ist vor allem dann zu achten, wenn in einer Task einem programminternen Dateinamen nacheinander mehrere Dateien zugeordnet werden sollen.
Über die jeweils aktuell zugewiesenen katalogisierten Dateien informiert das SHOW-FILE-LINK-Kommando (siehe dazu Handbuch [3]).
Beispiel 9-2
Änderung von Dateizuweisungen
/ADD-FILE-LINK INOUTFIL,FILE.UPDATE.1 ——————————————————————————(1) /START-PROGRAM AKTUELL ... /ADD-FILE-LINK INOUTFIL,FILE.UPDATE.2 ——————————————————————————(2) /START-PROGRAM AKTUELL ... /REMOVE-FILE-LINK INOUTFIL —————————————————————————————————————(3)
Das COBOL-Programm AKTUELL vereinbart für eine Ein-/Ausgabedatei den Linknamen INOUTFIL. Es soll nacheinander die katalogisierten Dateien FILE.UPDATE.1 und FILE.UPDATE.2 aktualisieren.
(1) | Für die nachfolgende Verarbeitung wird dem Programm AKTUELL über den Linknamen INOUTFIL die Datei FILE.UPDATE.1 zugewiesen. |
(2) | Nach der Verarbeitung löst ein weiteres ADD-FILE-LINK-Kommando für den Linknamen INOUTFIL die bisher gültige Dateizuordnung auf und weist als neue Datei FILE.UPDATE.2 zu. |
(3) | REMOVE-FILE-LINK hebt die Dateizuweisung für den Linknamen INOUTFIL auf. |
Implizite Zuweisung über Voreinstellungen
Ist einem internen Dateinamen mit dem Linknamen „linkname“ zum Programmablauf explizit keine katalogisierte Datei zugeordnet, werden die folgenden Voreinstellungen wirksam:
Bei einer Ausgabedatei und ENABLE-UFS-ACCESS = NO versucht das Programm auf eine katalogisierte Datei mit dem Namen aus der SELECT-Klausel zuzugreifen. Findet sich unter diesem Namen kein Katalogeintrag, schreibt das Programm in eine Datei mit dem Namen FILE.COBOL.linkname, die es vorher angelegt hat.
Bei ENABLE-UFS-ACCESS = YES schreibt das Programm unmittelbar in die DateiFILE.COBOL.linkname.Bei einer Eingabedatei, deren SELECT-Klausel die Angabe OPTIONAL enthält, verursacht der erste Lesezugriff eine AT END-Bedingung und verzweigt zu den Prozeduren, die im Programm für diesen Fall vereinbart sind.
Bei einer Eingabedatei (ohne OPTIONAL-Angabe in der SELECT-Klausel) und ENABLE-UFS-ACCESS = NO oder einer Ein-/Ausgabedatei versucht das Programm, auf eine katalogisierte Datei mit dem Namen aus der SELECT-Klausel zuzugreifen. Findet sich unter diesem Namen kein Katalogeintrag, wird der Ablauf mit der Fehlermeldung COB9117 unterbrochen und kann nach einer korrekten Dateizuweisung mit dem RESUME-PROGRAM-Kommando fortgesetzt werden.
Zuweisung über das ASSIGN-systemdatei-Kommando
Voraussetzung dafür ist, dass in der ASSIGN-Klausel der Name einer Systemdatei angegeben wurde. Die Systemdateien werden durch herstellername-1 (PRINTER) oder herstellername-2 (PRINTER01...PRINTER99, SYSIPT, SYSOPT) bezeichnet.
Durch ein ASSIGN-systemdatei-Kommando für die angegebene Systemdatei kann vor dem Programmaufruf
eine katalogisierte Datei oder
eine andere Systemdatei
zugewiesen werden. Welche Zuordnung dabei für die jeweilige Systemdatei zulässig sind, ist der Beschreibung des ASSIGN-systemdatei-Kommandos in [3] zu entnehmen.
Beispiel 9-3
Zuweisung einer katalogisierten Datei über das ASSIGN-systemdatei-Kommando
|
Wird zum Programmablauf explizit keine Datei zugewiesen, führt das Programm seine Ein-/Ausgabeoperationen auf der angegebenen Systemdatei aus.
Eine Dateizuweisung bleibt so lange bestehen, bis sie
durch das Task-Ende gelöscht oder
durch ein nachfolgendes ASSIGN-systemdatei-Kommando geändert wird.
Darauf ist vor allem dann zu achten, wenn in einer Task einem programminternen Dateinamen nacheinander mehrere Dateien zugeordnet werden sollen.
Über die jeweils aktuell zugewiesenen Dateien informiert das SHOW-SYSTEM-FILE-ASSIGNMENTS-Kommando.