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. |