Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Erstellen einer relativen Datei mit wahlfreiem Zugriff

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.