Das folgende Programmskelett gibt einen Überblick über die wichtigsten Klauseln und Anweisungen, die COBOL2000 für die Verarbeitung sequenzieller Dateien zur Verfügung stellt. Die wesentlichen Angaben werden im Anschluss daran kurz erläutert:
IDENTIFICATION DIVISON. . . ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT interner-dateiname ASSIGN TO externer-name ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS statusfelder. . . DATA DIVISION. FILE SECTION. FD interner-dateiname BLOCK CONTAINS blocklängenangabe RECORD satzlängenangabe RECORDING MODE IS satzformat ... 01 datensatz. nn feld-1 typ&länge. nn feld-2 typ&länge. ... PROCEDURE DIVISON. ... OPEN open-modus interner-dateiname. ... WRITE datensatz. ... READ interner-dateiname ... REWRITE datensatz. ... CLOSE interner-dateiname. ... STOP RUN.
SELECT interner-dateiname
legt den Namen fest, unter dem die Datei in der Übersetzungseinheit angesprochen wird. interner-dateiname muss ein gültiges Programmiererwort sein.
Das Format der SELECT-Klausel erlaubt auch die Angabe OPTIONAL für Eingabedateien, die beim Programmablauf nicht unbedingt vorhanden sein müssen.
Ist einem mit SELECT OPTIONAL vereinbarten Dateinamen beim Programmablauf keine Datei zugewiesen, so wird
bei OPEN INPUT im Dialogbetrieb der Programmablauf mit der Meldung COB9117 unterbrochen und ein ADD-FILE-LINK-Kommando angefordert, im Stapelbetrieb die AT END-Bedingung ausgelöst,
bei OPEN I-O oder OPEN EXTEND eine Datei mit dem Namen FILE.COBOL.linkname angelegt.
ASSIGN TO externer-name
gibt die Systemdatei an, die der Datei zugewiesen wird, oder legt den Linknamen fest, über den eine katalogisierte Datei zugeordnet werden kann.
externer-name muss entweder
ein zulässiges Literal,
ein in der DATA DIVISION definierter zulässiger Datenname oder
ein gültiger Herstellername
aus dem Format der ASSIGN-Klausel sein (siehe Handbuch „COBOL2000-Sprachbeschreibung“ [ 1]).
ORGANIZATION IS SEQUENTIAL
legt fest, dass die Datei satzsequenziell organisiert ist.
Die ORGANIZATION-Klausel kann bei satzsequenziellen Dateien entfallen, da satzsequenzielle Dateiorganisation die Standardannahme des Compilers ist.
ACCESS MODE IS SEQUENTIAL
bestimmt, dass auf die Sätze der Datei nur sequenziell zugegriffen werden kann. Die ACCESS MODE-Klausel ist optional und dient bei sequenziellen Dateien lediglich der Dokumentation, da sequenzieller Zugriff die Standardannahme des Compilers und die einzige für sequenzielle Dateien erlaubte Zugriffsart ist.
FILE STATUS IS statusfelder
gibt die Datenfelder an, in denen das Laufzeitsystem nach jedem Zugriff auf die Datei Informationen darüber hinterlegt,
ob die Ein-/Ausgabeoperation erfolgreich war und
welcher Art ggf. die dabei aufgetretenen Fehler sind.
Die statusfelder müssen in der WORKING-STORAGE SECTION oder der LINKAGE SECTION vereinbart werden. Ihr Format und die Bedeutung der einzelnen Zustandscodes werden in Abschnitt „Verarbeiten von Magnetbanddateien" beschrieben.Die FILE STATUS-Klausel ist optional. Wird sie nicht angegeben, stehen dem Programm die oben erwähnten Informationen nicht zur Verfügung.
BLOCK CONTAINS blocklängenangabe
legt die maximale Größe eines logischen Blockes fest. Sie bestimmt, wie viele Datensätze jeweils gemeinsam durch eine Ein-/Ausgabeoperation in den bzw. aus dem Puffer des Programms übertragen werden sollen.
blocklängenangabe muss dabei eine zulässige Angabe aus dem Format der BLOCKCONTAINS-Klausel sein.
Die Blockung von Datensätzen verringert
die Zahl der Zugriffe auf periphere Speicher und damit die Laufzeit des Programms und
die Zahl der Blockzwischenräume auf dem Speichermedium und damit den physischen Platzbedarf der Datei.
Der Compiler errechnet bei der Übersetzung aus den Angaben in der Übersetzungseinheit über Block- und Satzlänge einen Wert für die Puffergröße, der bei Plattendateien vom Laufzeitsystem für das DVS auf das nächstgrößere Vielfache eines PAM-Blockes (2048 Byte) aufgerundet wird. Diese Voreinstellung kann bei der Dateizuweisung durch die Angabe des BUFFER-LENGTH-Operanden im ADD-FILE-LINK-Kommando verändert werden (siehe Abschnitt „Festlegen von Dateimerkmalen"), wobei darauf zu achten ist, dass
der Puffer mindestens so groß sein muss wie der längste Datensatz und
bei Verarbeitung im keylosen Format (BLKCTRL = DATA) die Verwaltungsinformationen („Pamkey“) im Puffer Platz finden (siehe Abschnitt „Platten- und Dateiformate").
Außer bei neu angelegten Dateien (OPEN OUTPUT) hat die im Katalog eingetragene Blockgröße stets Vorrang gegenüber den Blockgrößenangaben im Programm bzw. im ADD-FILE-LINK-Kommando.
Die BLOCK CONTAINS-Klausel ist optional. Wird sie nicht angegeben, nimmt der Compiler BLOCK CONTAINS 1 RECORD an, d.h. ungeblockte Datensätze.
RECORD satzlängenangabe
legt fest, ob Sätze fester oder variabler Länge verarbeitet werden sollen und
bestimmt bei Sätzen variabler Länge einen Bereich für die zulässigen Satzgrößen sowie, falls im Format angegeben, ein Datenfeld zur Aufnahme der jeweils aktuellen Satzlängeninformation.
satzlängenangabe muss einem der drei Formate der RECORD-Klausel entsprechen, die COBOL2000 zur Verfügung stellt. Sie darf nicht im Widerspruch zu den Satzlängen stehen, die der Compiler aus den Angaben der zugehörigen Datensatzerklärung(en) errechnet.
Die RECORD-Klausel ist optional. Wird sie nicht angegeben, ergibt sich das Satzformat aus der Angabe der RECORDING MODE-Klausel (siehe unten). Fehlt auch diese, nimmt der Compiler Sätze variabler Länge an. (Zu den Abhängigkeiten zwischen RECORD- und RECORDING MODE-Klausel siehe Abschnitt „Zulässige Satzformate und Zugriffsarten" ).
RECORDING MODE IS U
gibt an, dass das Format der logischen Datensätze „undefiniert“ ist; d.h. die Datei kann eine beliebige Kombination von festen oder variablen Datensätzen enthalten.
Die RECORDING MODE-Klausel ist optional und nur für die Vereinbarung von Datensätzen undefinierter Länge erforderlich, da die Sätze fester und variabler Länge in derRECORD-Klausel festgelegt werden (siehe Abschnitt „Zulässige Satzformate und Zugriffsarten").
01 datensatz. nn feld-1 typ&länge nn feld-2 typ&länge
stellt eine Datensatzerklärung für die zugehörige Datei dar. Sie beschreibt den logischen Aufbau von Datensätzen.
Für jede Datei ist mindestens eine Datensatzerklärung erforderlich. Werden für eine Datei mehrere Datensatzerklärungen angegeben, ist das vereinbarte Satzformat zu beachten:
Bei Sätzen fester Länge müssen alle Satzerklärungen die gleiche Größe haben,
bei Sätzen variabler Länge dürfen sie nicht im Widerspruch zur Satzlängenangabe der RECORD-Klausel stehen.
Die Unterteilung von datensatz in Datenfelder (feld-1, feld-2, ...) ist optional. Für typ&länge sind die erforderlichen Längen- und Formatvereinbarungen (PICTURE- und USAGE-Klauseln etc.) einzusetzen.
OPEN open-modus interner-dateiname
eröffnet die Datei in der angegebenen Eröffnungsart open-modus für die Verarbeitung. Für open-modus sind folgende Angaben möglich:
INPUT | eröffnet die Datei als Eingabedatei; sie kann nur gelesen werden. |
OUTPUT | eröffnet die Datei als Ausgabedatei; sie kann nur geschrieben werden. |
EXTEND | eröffnet die Datei als Ausgabedatei; sie kann erweitert werden. |
I-O | eröffnet die Datei als Ein-/Ausgabedatei; sie kann (Satz für Satz) gelesen, aktualisiert und zurückgeschrieben werden. |
Die Angabe open-modus legt fest, mit welchen Ein-/Ausgabeanweisungen auf die Datei zugegriffen werden darf (siehe Abschnitt „Eröffnungsarten und Verarbeitungsformen (sequenzielle Dateien)").
WRITE datensatz READ interner-dateiname REWRITE datensatz
sind Ein-/Ausgabeanweisungen für die Datei, die jeweils einen Satz
schreiben bzw.
lesen bzw.
zurückschreiben
Welche dieser Anweisungen für die Datei zulässig sind, hängt von der Eröffnungsart ab, die in der OPEN-Anweisung vereinbart wird. Dieser Zusammenhang wird in Abschnitt „Eröffnungsarten und Verarbeitungsformen (sequenzielle Dateien)" beschrieben.
CLOSE interner-dateiname
beendet – je nach Angabe im Format – die Verarbeitung
der Datei (keine weitere Angabe) oder
einer Plattenspeichereinheit (Angabe: UNIT) oder
einer Magnetbandspule (Angabe: REEL)
und verhindert wahlweise
ein Rückspulen des Magnetbandes (Angabe: WITH NO REWIND) oder
ein erneutes Eröffnen der Datei (Angabe: WITH LOCK) im selben Programmablauf.