Das folgende Beispiel gibt ein einfaches COBOL-Programm wieder, mit dem eine relative Datei mit wahlfreiem Zugriff erstellt werden kann. Die Datensätze können dabei in beliebiger Reihenfolge in die Datei geschrieben werden.
Beispiel 9-9
Programm zum wahlfreien Erstellen einer relativen Datei
IDENTIFICATION DIVISION.
PROGRAM-ID. RELATIV.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
TERMINAL IS T.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT RELATIVE-FILE
ASSIGN TO "RELFILE"
ORGANIZATION IS RELATIVE
ACCESS MODE IS RANDOM ——————————————————————————————————————(1)
RELATIVE KEY IS REL-KEY ————————————————————————————————————(2)
FILE STATUS IS FS-CODE DMS-CODE. ———————————————————————————(3)
DATA DIVISION.
FILE SECTION.
FD RELATIVE-DATEI.
01 RELATIVE-SATZ PIC X(33).
WORKING-STORAGE SECTION.
01 REL-KEY PIC 9(3).
88 EINGABE-ENDE VALUE ZERO.
01 EIN-AUSGABE-ZUSTAND.
05 FS-CODE PIC 9(2).
05 DMS-CODE.
06 DMS-CODE-1 PIC 9(2) COMP.
88 DMS-CODE-2-DEFINED VALUE 64.
06 DMS-CODE-2 PIC X(4).
01 CLOSE-SCWITCH PIC X VALUE "0".
88 DATEI-OFFEN VALUE "1".
88 DATEI-GESCHLOSSEN VALUE "0".
01 RELATIVE-TEXT.
05 PIC X(24)
VALUE „******DIES IST SATZ NR. „.
05 SATZNR PIC 9(3).
05 PIC X(6) VALUE "$$$$$$".
PROCEDURE DIVISION.
DECLARATIVES.
AUSGABE-FEHLER SECTION.
USE AFTER STANDARD ERROR PROCEDURE ON RELATIVE-FILE.
PERMANENTER-FEHLER. ———————————————————————————————————————————(4)
IF FS-CODE NOT LESS THAN 30
DISPLAY „NICHT BEHEBBARER FEHLER FUER RELATIV-DATEI"
UPON T
DISPLAY „FILE STATUS: „ FS-CODE UPON T
IF DMS-CODE-2-DEFINED
DISPLAY „DMS-CODE: „ DMS-CODE-2 UPON T
END-IF
IF DATEI-OFFEN
CLOSE RELATIVE-DATEI
END-IF
DISPLAY „PROGRAMM ABNORMAL BEENDET" UPON T
STOP RUN
END-IF.
AUSGABE-FEHLER-ENDE.
EXIT.
END DECLARATIVES.
VORLAUF.
OPEN OUTPUT RELATIVE-DATEI
SET DATEI-OFFEN TO TRUE.
DATEI-LADEN.
PERFORM SATZNUMMER-EINLESEN
WITH TEST AFTER
UNTIL REL-KEY IS NUMERIC
PERFORM WITH TEST BEFORE UNTIL EINGABE-ENDE
WRITE RELATIV-SATZ FROM RELATIV-TEXT
INVALID KEY —————————————————————————————————————————(5)
DISPLAY „SATZ MIT NR. „ REL-KEY
„IST BEREITS IN DER DATEI" UPON T
END-WRITE
PERFORM SATZNUMMER-EINLESEN
WITH TEST AFTER
UNTIL REL-KEY IS NUMERIC
END-PERFORM.
NACHLAUF.
SET DATEI-GESCHLOSSEN TO TRUE
CLOSE RELATIVE-DATEI
STOP RUN.
SATZNUMMER-EINLESEN.
DISPLAY „BITTE SATZNUMMER EINGEBEN; DREISTELLIG MIT FUEHRENDE
- „N NULLEN" UPON T
DISPLAY „PROGRAMM BEENDEN MIT ‚000'" UPON T
ACCEPT REL-KEY FROM T
IF REL-KEY NUMERIC
THEN MOVE REL-KEY TO SATZNR
ELSE DISPLAY „EINGABE MUSS NUMERISCH SEIN" UPON T
END-IF.
(1) | Die ACCESS MODE-Klausel vereinbart wahlfreien Zugriff auf die Sätze der Datei RELATIV-DATEI. Sie können also bei der Erstellung in beliebiger Reihenfolge in die Datei geschrieben werden. |
(2) | Die RELATIVE KEY-Angabe legt REL-KEY als Schlüsselfeld für die relativen Satznummern fest. Es wird in der WORKING-STORAGE SECTION als dreistelliges numerisches Datenfeld vereinbart, |
(3) | In der FILE STATUS-Klausel wird von der Möglichkeit Gebrauch gemacht, dem Programm zusätzlich zum FILE STATUS-Code auch den Fehlercode des DVS zur Verfügung zu stellen. Die Datenfelder zur Aufnahme dieser Informationen werden in der WORKING-STORAGE SECTION vereinbart und in den DECLARATIVES ausgewertet. |
(4) | Die DECLARATIVES sehen lediglich eine Prozedur für nicht behebbare Ein-/Ausgabefehler (FILE STATUS ≥ 30) vor, da eine Endebedingung bei Ausgabedateien nicht auftreten kann und Schlüsselfehler über INVALID KEY abgefangen werden. |
(5) | Eine INVALID KEY-Bedingung bei wahlfreiem WRITE tritt auf, wenn der Satz mit der zugehörigen relativen Satznummer bereits in der Datei vorhanden ist. |