Das folgende Programmskelett gibt einen Überblick über die wichtigsten Klauseln und Anweisungen, die COBOL2000 für die Verarbeitung relativer Dateien zur Verfügung stellt. Die wesentlichsten Angaben werden im Anschluss daran kurz erläutert:
IDENTIFICATION DIVISION. ... ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT interner-dateiname ASSIGN TO externer-name ORGANIZATION IS RELATIVE ACCESS MODE IS zugriffsart RELATIVE KEY IS schlüssel FILE STATUS IS statusfelder. ... DATA DIVISION. FILE SECTION. FD interner-dateiname BLOCK CONTAINS blocklängenangabe RECORD CONTAINS satzlängenangabe ... 01 datensatz. nn feld-1 typ&länge. nn feld-2 typ&länge. ... WORKING-STORAGE SECTION. ... nn schlüssel typ&länge ... PROCEDURE DIVISION. ... OPEN open-modus interner-dateiname ... START interner-dateiname ... READ interner-dateiname ... REWRITE datensatz ... WRITE datensatz ... DELETE interner-dateiname ... 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 RELATIVE
legt fest, dass die Datei relativ organisiert ist.
ACCESS MODE IS zugriffsart
bestimmt die Art, in der auf die Sätze der Datei zugegriffen werden kann. Für zugriffsart sind folgende Angaben möglich (siehe auch Abschnitt „Eröffnungsarten und Verarbeitungsformen (relative Dateien)"):
SEQUENTIAL | legt fest, dass die Sätze nur sequenziell verarbeitet werden. |
RANDOM | vereinbart, dass auf die Sätze nur wahlfrei zugegriffen wird. |
DYNAMIC | gestattet, dass auf die Sätze wahlweise sequenziell oder wahlfrei zugegriffen wird. |
Die ACCESS MODE-Klausel ist optional. Wird sie nicht angegeben, nimmt der Compiler ACCESS MODE IS SEQUENTIAL an.
RELATIVE KEY IS schlüssel
gibt das Schlüsseldatenfeld zur Aufnahme der relativen Satznummern bei wahlfreiem Zugriff auf die Datensätze an.
schlüssel muss als ganzzahliges Datenfeld ohne Vorzeichen vereinbart werden. Es darf nicht Bestandteil der zugehörigen Datensatzerklärung sein.
Bei wahlfreiem Zugriff muss schlüssel vor jeder Ein-/Ausgabeanweisung mit der relativen Nummer des Satzes versorgt werden, der bearbeitet werden soll.
Die RELATIVE KEY-Angabe ist optional bei Dateien, für die ACCESS MODE IS SEQUENTIAL vereinbart wird; bei ACCESS MODE IS RANDOM oder DYNAMIC muss sie angegeben werden.
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 „Ein-/Ausgabezustände" 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 Blocks 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 eine ganze Zahl und darf nicht kleiner sein als die Satzlänge der Datei und nicht größer als 32767. Sie gibt die Größe des logischen Blocks in Byte an.
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.
Andererseits wird bei Zugriffen mit Sperrmechanismus im Verlauf einer Simultanverarbeitung (siehe Abschnitt „Simultanverarbeitung von Dateien (SHARED-UPDATE)") stets der gesamte Block gesperrt, in dem sich der aktuelle Satz befindet. Ein großer Blockungsfaktor führt in diesem Fall daher zu Einbußen an Verarbeitungsgeschwindigkeit.
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 vom Laufzeitsystem für das DVS auf das nächstgrößere Vielfache eines PAM-Blocks (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, wobei darauf zu achten ist, dass der Puffer mindestens so groß sein muss wie der längste Datensatz.
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 als Blockgröße die Satzlänge der Datei an.
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 und, 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, nimmt der Compiler Sätze variabler Länge an.
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-Klausel etc.) einzusetzen.
Das in der RELATIVE KEY-Angabe vereinbarte Schlüsseldatenfeld darf datensatz nicht untergeordnet sein.
nn schlüssel typ&länge
vereinbart das in der RELATIVE KEY-Angabe angegebene Schlüsseldatenfeld. Bei der Festlegung von typ&länge ist zu beachten, dass schlüssel ein ganzzahliges Datenfeld ohne Vorzeichen sein muss.
Bei wahlfreiem Zugriff muss schlüssel vor jeder Ein-/Ausgabeanweisung mit der relativen Satznummer des zu bearbeitenden Satzes versorgt werden.
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 neu 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 für open-modus legt fest, mit welchen Ein-/Ausgabeanweisungen auf die Datei zugegriffen werden darf (siehe Abschnitt „Eröffnungsarten und Verarbeitungsformen (relative Dateien)").
START interner-dateiname READ interner-dateiname REWRITE datensatz WRITE datensatz DELETE interner-dateiname
sind Ein-/Ausgabeanweisungen für die Datei, die jeweils
in der Datei auf einen Satz positionieren bzw.
einen Satz lesen bzw.
einen Satz zurückschreiben bzw.
einen Satz schreiben bzw.
einen Satz löschen.
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 (relative Dateien)" beschrieben.
CLOSE interner-dateiname
beendet die Verarbeitung der Datei.
Durch die zusätzliche Angabe WITH LOCK kann ein erneutes Eröffnen der Datei im selben Programmlauf verhindert werden.