Show TOC Anfang des Inhaltsbereichs

Extrakt auslesen  Dokument im Navigationsbaum lokalisieren

Ähnlich wie bei der Schleifenverarbeitung interner Tabellen können die Daten eines Extraktdatenbestands über eine Schleife ausgelesen werden:

LOOP.
...
  [AT FIRST |
AT fgi [WITH fgj] | AT LAST.
  ...
  
ENDAT.]
...
ENDLOOP.

Mit der Anweisung LOOP wird die Erzeugung des Extraktdatenbestands eines Programms abgeschlossen und eine Schleife über seine sämtlichen Sätze ausgeführt. Es wird pro Schleifendurchlauf ein Extraktdatensatz eingelesen. Die Werte der extrahierten Daten werden innerhalb der Schleife direkt in die Ausgangsfelder zurückgestellt. Es können mehrere Schleifen hintereinander ausgeführt werden. Die Schleife über einen Extraktdatenbestand ist nicht schachtelbar. Weiterhin können innerhalb und nach der Schleife keine weiteren EXTRACT-Anweisungen verwendet werden. In beiden Fällen kommt es zum Laufzeitfehler.

Im Unterschied zu internen Tabellen wird bei Extraktdatenbeständen also kein spezieller Arbeitsbereich oder ein Feldsymbol als Schnittstelle benötigt. Für jeden gelesenen Satz können die eingelesenen Daten innerhalb der Schleife unter ihren ursprünglichen Feldnamen weiterverarbeitet werden.

Schleifensteuerung

Um verschiedene Anweisungen nur für bestimmte Sätze des Datenbestands auszuführen, kann man die Steueranweisungen AT und ENDATverwenden.

Die Anweisungsblöcke zwischen den Steueranweisungen werden für die unterschiedlichen Argumente von AT wie folgt abgearbeitet:

·        AT FIRST

Der Anweisungsblock wird einmal beim ersten Satz des Datenbestands ausgeführt

·        AT fgi [WITH fgj] Der Anweisungsblock wird dann abgearbeitet, wenn die Satzart des aktuellen eingelesenen Extraktsatzes durch die Feldgruppe fgi definiert wurde. Wenn Sie den Zusatz WITH fgj verwenden, muss im Extraktdatenbestand auf den eingelesenen Satz der Feldgruppe fgiunmittelbar ein Satz der Feldgruppe fgj folgen.

·        AT LAST

Der Anweisungsblock wird einmal beim letzten Satz des Datenbestands ausgeführt

Die Steueranweisungen AT und ENDAT können auch zur Gruppenstufenverarbeitung eingesetzt werden.

Beispiel

Das folgende Programm sei mit der logischen Datenbank F1S verknüpft.

REPORT demo_extract_loop.

NODES: spfli, sflight.

FIELD-GROUPS: header, flight_info, flight_date.

INSERT: spfli-carrid spfli-connid sflight-fldate
        INTO header,
        spfli-cityfrom spfli-cityto
        INTO flight_info.

START-OF-SELECTION.

GET spfli.
  EXTRACT flight_info.

GET sflight.
  EXTRACT flight_date.

END-OF-SELECTION.

  LOOP.
    AT FIRST.
      WRITE / 'Start of
LOOP'.
      ULINE.
    ENDAT.
    AT flight_info WITH flight_date.
      WRITE: / 'Info:',
               spfli-carrid , spfli-connid, sflight-fldate,
               spfli-cityfrom, spfli-cityto.
    ENDAT.
    AT flight_date.
      WRITE: / 'Date:',
                spfli-carrid , spfli-connid, sflight-fldate.
    ENDAT.
    AT LAST.
      ULINE.
      WRITE / 'End of
LOOP'.
    ENDAT.
  ENDLOOP.

Das Anlegen und Füllen des Extraktdatenbestands entspricht dem Beispiel unter Extrakt mit Daten füllen. Zum Zeitpunkt END-OF-SELECTION ist die Datenbeschaffung durch die logische Datenbank abgeschlossen und der Datenbestand wird in der LOOP-Schleife einmal gelesen.

Durch die Steueranweisungen AT FIRST und AT LAST werden zu Beginn und Ende der Schleife jeweils eine Zeile und eine Linie in die Liste geschrieben.

Durch die Steueranweisung AT fgi werden für jede der beiden Satzarten die entsprechenden Felder ausgegeben. Durch den Zusatz WITH flight_date werden die Sätze der Feldgruppe flight_info nur dann ausgegeben, wenn danach mindestens ein Satz der Feldgruppe flight_date kommt, also wenn die logische Datenbank zu einem Flug mindestens ein Datum übergeben hat.

Der Anfang der Ausgabeliste sieht etwa folgendermaßen aus:

Diese Grafik wird im zugehörigen Text erklärt

Dass der Inhalt des Felds sflight-fldate im Bereich header der Satzart flight_info auf der Liste als Gatter (#) dargestellt ist, liegt daran, dass die logische Datenbank am Ende einer Hierarchiestufe alle Felder dieser Stufe mit HEX-Nullwerten füllt. Diese Eigenschaft ist wichtig für das Sortieren und die Gruppenstufenverarbeitung von Extraktdatenbeständen.

 

 

Ende des Inhaltsbereichs