Mit den Sprachmitteln eines COBOL-Programms lassen sich relative Dateien
erstellen,
lesen,
durch Hinzufügen neuer Datensätze erweitern und
durch Abändern oder Löschen vorhandener Datensätze aktualisieren.
Welche Ein-/Ausgabeanweisungen im Programm jeweils für eine Datei zulässig sind, wird dabei durch ihren Eröffnungsmodus bestimmt, der in der OPEN-Anweisung angegeben wird:
OPEN OUTPUT
Als Ein-/Ausgabeanweisung ist unabhängig von der Angabe in der ACCESS MODE-Klausel WRITE mit folgendem Format erlaubt:
WRITE...[FROM...] [INVALID KEY...] [NOT INVALID KEY...] [END WRITE...]
In diesem Modus können relative Dateien ausschließlich neu erstellt (geladen) werden. Abhängig von der vereinbarten Zugriffsart hat die WRITE-Anweisung dabei folgende Wirkung:
ACCESS MODE IS SEQUENTIAL
erlaubt, eine relative Datei sequenziell zu erstellen. WRITE schreibt dabei - beginnend mit 1 - die Sätze mit lückenlos aufsteigenden relativen Satznummern in die Datei.
Das RELATIVE KEY-Schlüsselfeld - wenn angegeben - wird von WRITE nicht ausgewertet; es enthält jeweils die (automatisch hochgezählte) relative Satznummer des zuletzt geschriebenen Satzes.ACCESS MODE IS RANDOM oder DYNAMIC
(beide Angaben haben hier gleiche Bedeutung) ermöglicht es, eine Datei wahlfrei zu erstellen. WRITE schreibt dabei jeden Datensatz an die Position in der Datei, die dessen Satznummer angibt.
Das RELATIVE KEY-Schlüsselfeld muss daher vor jeder WRITE-Anweisung mit der relativen Satznummer versorgt werden, die der zu schreibende Satz in der Datei erhalten soll. Wird dabei die Nummer eines bereits existierenden Satzes angegeben, tritt eine INVALID KEY-Bedingung auf und WRITE verzweigt zur INVALID-KEY-Anweisung bzw. zur vereinbarten USE-Prozedur, ohne den Satz zu schreiben. Ein Überschreiben von Datensätzen ist hier also nicht möglich.
OPEN EXTEND
Mit OPEN EXTEND kann eine vorhandene Datei erweitert werden. Der Zugriff kann nur sequenziell erfolgen.
ACCESS MODE IS SEQUENTIAL
erlaubt, eine relative Datei sequenziell zu erweitern. WRITE schreibt dabei - beginnend mit dem höchsten Schlüssel+1 - die Sätze mit lückenlos aufsteigenden relativen Satznummern in die Datei.
Das RELATIVE KEY-Schlüsselfeld - wenn angegeben - wird von WRITE nicht ausgewertet; es enthält jeweils die (automatisch hochgezählte) relative Satznummer des zuletzt geschriebenen Satzes.
OPEN INPUT
Welche Ein-/Ausgabeanweisungen bzw. Anweisungsformate erlaubt sind, hängt von der Angabe in der ACCESS MODE-KLausel ab. Die folgende Tabelle stellt die Möglichkeiten für OPEN INPUT zusammen:
Anweisung | Eintrag in der ACCESS MODE-Klausel | ||
SEQUENTIAL | RANDOM | DYNAMIC | |
START | START... | Anweisung nicht zulässig | START... |
READ | READ...[NEXT | PREVIOUS] | READ... | Für sequenziellen Zugriff: |
READ...{NEXT | PREVIOUS} | |||
Für wahlfreien Zugriff: |
Tabelle 27: Erlaubte Ein-/Ausgabeanweisung für OPEN INPUT
In diesem Modus können relative Dateien gelesen werden. Abhängig von der vereinbarten Zugriffsart hat die READ-Anweisung dabei folgende Wirkung:
ACCESS MODE IS SEQUENTIAL
erlaubt es ausschließlich, die Datei sequenziell zu lesen. READ stellt dabei die Datensätze in der Reihenfolge aufsteigender (NEXT) und absteigender (PREVIOUS) relativer Satznummern zur Verfügung.
Das RELATIVE KEY-Schlüsselfeld - wenn angegeben - wird von READ nicht ausgewertet; es enthält jeweils die relative Satznummer des zuletzt gelesenen Satzes. Falls ein RELATIVE KEY-Schlüsselfeld vereinbart wird, kann jedoch vor der Ausführung einer READ-Anweisung mit Hilfe von START auf einen beliebigen Satz der Datei positioniert werden: Über eine Vergleichsbedingung legt START die relative Satznummer des zuerst zu lesenden Satzes und damit den Ausgangspunkt für nachfolgende sequenzielle Leseoperationen fest.
Kann die Vergleichsbedingung von keiner relativen Satznummer der Datei erfüllt werden, tritt eine INVALID KEY-Bedingung auf und START verzweigt zur INVALID KEY-Anweisung bzw. zur vereinbarten USE-Prozedur.ACCESS MODE IS RANDOM
ermöglicht es, die Sätze der Datei wahlfrei zu lesen. READ stellt dabei die Datensätze in beliebiger Reihenfolge zur Verfügung; der Zugriff auf jeden Satz erfolgt über seine relative Satznummer.
Das RELATIVE KEY-Schlüsselfeld muss dazu vor jeder READ-Anweisung mit der relativen Nummer des Satzes versorgt werden, der gelesen werden soll. Wird dabei die Nummer eines nicht existierenden Satzes (z.B. eines Leersatzes) angegeben, tritt eine INVALID KEY-Bedingung auf und READ verzweigt zur INVALID KEY-Anweisung bzw. zur vereinbarten USE-Prozedur.ACCESS MODE IS DYNAMIC
gestattet es, die Datei sowohl sequenziell als auch wahlfrei zu lesen.
Die jeweilige Zugriffsart wird dabei über das Format der READ-Anweisung gewählt (siehe Tabelle 27).
Eine START-Anweisung ist nur für sequenzielles Lesen sinnvoll.
OPEN I-O
Welche Ein-/Ausgabeanweisungen bzw. Anweisungsformate erlaubt sind, hängt von der Angabe in der ACCESS MODE-Klausel ab. Die folgende Tabelle stellt die Möglichkeiten für OPEN I-O zusammen:
Anweisung | Eintrag in der ACCESS MODE-Klausel | ||
SEQUENTIAL | RANDOM | DYNAMIC | |
START | START... | Anweisung nicht zulässig | START... |
READ | READ...[NEXT | PREVIOUS] | READ... | Für sequenziellen Zugriff: |
Für wahlfreien Zugriff: | |||
REWRITE | REWRITE... | REWRITE... | REWRITE... |
WRITE | Anweisung nicht zulässig | WRITE... | WRITE... |
DELETE | DELETE... | DELETE... | DELETE... |
Tabelle 28: Erlaubte Ein-/Ausgabeanweisungen für OPEN I-O
In diesem Modus können in einer relativen Datei Sätze
gelesen,
hinzugefügt,
durch das Programm aktualisiert und
überschrieben oder
gelöscht werden.
OPEN I-O setzt voraus, dass die zu verarbeitende Datei bereits existiert. Es ist daher nicht möglich, in diesem Modus eine relative Datei neu zu erstellen.
Welche dieser Verarbeitungsformen durchgeführt werden können, und wie die
Ein-/Ausgabeanweisungen dabei wirken, hängt von der vereinbarten Zugriffsart ab:
ACCESS MODE IS SEQUENTIAL
erlaubt es, wie bei OPEN INPUT die Datei mit READ sequenziell zu lesen und dabei durch einen vorhergehenden START auf einen beliebigen Satz der Datei als Anfangspunkt zu positionieren.
Darüber hinaus kann nach einem erfolgreichen READ der gelesene Satz durch das Programm aktualisiert und mit REWRITE zurückgeschrieben oder mit DELETE logisch gelöscht werden. Dabei darf zwischen READ und REWRITE bzw. DELETE keine weitere Ein-/Ausgabeanweisung für diese Datei ausgeführt werden.ACCESS MODE IS RANDOM
ermöglicht es, wie bei OPEN INPUT mit READ Sätze wahlfrei zu lesen.
Ferner können mit WRITE neue Sätze in die Datei eingefügt und mit REWRITE bzw. DELETE bereits in der Datei vorhandene Sätze überschrieben bzw. gelöscht werden (unabhängig davon, ob sie vorher gelesen wurden).
Das RELATIVE KEY-Schlüsselfeld muss dazu vor jeder WRITE-, REWRITE- oder DELETE-Anweisung mit der relativen Nummer des Satzes versorgt werden, der hinzugefügt, überschrieben oder gelöscht werden soll. Wird bei WRITE die Nummer eines bereits vorhandenen Satzes bzw. bei REWRITE bzw. DELETE die Nummer eines nicht existierenden Satzes (z.B. eines Leersatzes)angegeben, tritt eine INVALID KEY-Bedingung auf und WRITE, REWRITE oder DELETE verzweigen zur INVALID KEY-Anweisung bzw. zur vereinbarten USE-Prozedur.
ACCESS MODE IS DYNAMIC
gestattet es, die Datei sowohl sequenziell als auch wahlfrei zu verarbeiten. Die jeweilige Zugriffsart wird dabei über das Format der READ-Anweisung gewählt.