READ-Anweisung

Soll aus einer Datei gelesen werden, so bedarf es dieser Anweisung. Dabei wird der gewünschte Satz jedoch lediglich in den dafür bereitgehaltenen Speicherberich überführt. Soll der Inhalt des Speicherbereiches dann auch noch in ein bestimmtes, in der WORKING-STORAGE SECTION oder der LINKAGE SECTION definiertes Datenfeld übertragen werden, so wird hierzu INTO benutzt (Also quasi READ+MOVE):

READ Datei INTO Datensatz.


NEXT / PREVIOUS -Zusatz
Es ist möglich, index-sequentielle oder relative Dateien auch sequentiell zu verarbeiten. Hierzu muß als Zugriffsmodus DYNAMIC angegeben sein. Soll eine solche sequentielle Verarbeitung erfolgen und wird daher READ NEXT oder READ PREVIOUS verwendet, so wird ab der aktuellen Position innerhalb der Datei der folgende oder vorherige Datensatz gelesen.

Der AT END-Zusatz
Wie alles im Leben ist auch so eine Datei irgendwann mal zu Ende. Meistens soll in diesem Fall irgendeine bestimmte Wirkung eintreten. Denkbar wäre beispielsweise die Ausgabe einer Meldung "Keine weiteren Einträge" o.ä.. Meist wird hier jedoch ein Ende-Kennzeichen (EOF für End Of File) gesetzt, welches in einer Unterroutine abgefragt und die Folgen eingeleitet werden. Auf den AT END-Zusatz können eine oder mehrere Anweisungen folgen.

READ Datei AT END MOVE 1 TO EOF.


Liegt eine Datei vor, deren Zugriffsmodus DYNAMIC ist und wurde READ PREAVIOUS verwendet, so wird AT END auch erfüllt, wenn der Dateianfang erreicht wird.

Der NOT AT END-Zusatz
Mit Hilfe dieses Zusatzes kann eine Anweisungsfolge angegeben werden, die eintreten soll, solange das Dateiende noch nicht erreicht wurde. So könnte beispielsweise ein Satzzähler hochgezählt werden:

READ Datei NOT AT END ADD 1 TO Satzzahl.


WITH LOCK-Zusatz
Dieser Zusatz wird für den Multiuser-Betrieb verwendet. Später mehr dazu...

INVALID KEY-Zusatz
Liegt eine index-sequentielle Datei vor, so werden die Sätze gelesen, nachdem der Primärschlüssel (RECORD KEY) oder ein Sekundärschlüssel gefüllt wurde. Bei einer relativen Datei wird der Satz auf der Grundlage der 'Satznummer' im RELATIVE KEY eingelesen. Es ist in beiden Fällen darauf zu achten, daß der Schlüssel den Satz bestimmt aber dann die Datei gelesen wird und nicht der Satz.
Ist nun kein Satz mit dem angegebenen Schlüssel vorhanden, kann man hinter dem INVALID KEY-Zusatz eine Anweisung (z.B. PERFORM Upro) angeben, die in einem solchen Fall ausgeführt wird.

          :
          :
ENVIRONMENT DIVISION.
          :
INPUT-OUTPUT SECTION.
FILE-CONTROL.
   SELECT Stamm ASSIGN TO "C:Stamm.dat"
          ORGANIZATION IS INDEXED
          ACCESS MODE IS DYNAMIC
          RECORD KEY IS Stamm-Schl
          FILE STATUS IS Stamm-Stat.
          :
FILE SECTION.
FD Stamm.
01 Stamm-Satz.
   05 Stamm-Schl PIC X(4).
   05 Stamm-Daten PIC X(346).
          :
PROCEDURE DIVISION.
          :
   OPEN Stamm.
          :
   MOVE "4711" TO Stamm-Schl.
   READ Stamm INVALID KEY PERFORM Kein-Satz.
          :
          :
Kein-Satz SECTION.
          :


Hier soll der Satz mit dem Primärschlüssel '4711' in der Datei 'Stamm' gelesen werden. Ist ein solcher Satz nicht zu finden, so wird das Unterprogramm 'Kein-Satz' ausgeführt. In einem solchen Fall wird übrigens das FILE STATUS-Feld mit '23' gefüllt. Man kann also auch außerhalb der READ-Anweisung prüfen, ob der letzte Satz gefunden wurde oder nicht.

...