Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

INITIALIZE-Anweisung

&pagelevel(4)&pagelevel

Funktion

Die INITIALIZE-Anweisung ermöglicht es, ausgewählte Datenfelder mit spezifischen Werten zu versorgen.

Format


INITIALIZE {bezeichner-1} ... [WITH FILLER]

[{ ALL | kategoriename...} TO VALUE  ]

THEN REPLACING {kategoriename DATA BY {bezeichner-2 | literal-1}}... ]

[THEN TO DEFAULT ]


dabei steht kategoriename für:

{  ALPHABETIC
 | ALPHANUMERIC
 | ALPHANUMERIC-EDITED
 | DATA-POINTER
 | NATIONAL
 | NUMERIC
 |  NUMERIC-EDITED
 | OBJECT-REFERENCE
 | PROGRAM-POINTER
}


Syntaxregeln

  1. bezeichner-1 ist das Empfangsfeld der INITIALIZE-Anweisung. literal-1 und bezeichner-2 sind Sendefelder.

  2. Für die Sendefelder gilt:

    • Wenn DATA-POINTER in der REPLACING-Angabe genannt ist, muss bezeichner-2 gültiges Sendefeld einer SET-Anweisung sein, deren Empfangsfeld der Kategorie datenzeiger angehört.

    • Wenn PROGRAM-POINTER in der REPLACING-Angabe genannt ist, muss bezeichner-2 ein gültiges Sendefeld einer SET-Anweisung sein, deren Empfangsfeld der Kategorie programmzeiger angehört.

    • Wenn OBJECT-REFERENCE in der REPLACING-Angabe genannt ist, muss bezeichner-2 gültiges Sendefeld einer SET-Anweisung sein, deren Empfangsfeld der Kategorie objektreferenz angehört.

    • Jede andere in der REPLACING-Angabe genannte Datenkategorie muss als Datenkategorie eines Empfangsfeldes in einer MOVE-Anweisung zulässig sein, in der bezeichner-2 oder literal-1 das Sendefeld darstellen.

  3. Jede Datenkategorie darf nur einmal in der VALUE-Angabe und in der REPLACING-Angabe genannt werden.

  4. Die Datenerklärung von bezeichner-1 oder eines Datenfeldes, das bezeichner-1 untergeordnet ist, darf nicht die DEPENDING-Angabe der OCCURS-Klausel enthalten.

  5. Ein Indexdatenfeld darf nicht als Operand einer INITIALIZE-Anweisung auftreten.

  6. Die Datenerklärung von bezeichner-1 darf nicht die RENAMES-Klausel enthalten.

  7. Ist bezeichner-1 ein Tabellenelement oder enthält bezeichner-1 Tabellen, werden die VALUE-Angaben für Tabellenelemente ignoriert. Enthält die INITIALZE-Anweisung jedoch REPLACING- oder DEFAULT-Angaben, kommen statt dessen diese zur Wirkung.

Allgemeine Regeln

  1. Ist bezeichner-1 eine nationale Gruppe, so wird er wie eine Gruppe verarbeitet. Ist bezeichner-2 eine nationale Gruppe, so wird er wie ein Datenelement verarbeitet.

  2. Die Schlüsselwörter in kategoriename entsprechen den Kategorien von Daten (siehe unter "3. Klassen und Kategorien von Daten und Literalen"). Das Wort ALL in der VALUE-Angabe bedeutet dasselbe, als wäre jede Kategorie aus kategoriename angegeben worden.

  3. Ist mehr als ein bezeichner-1 angegeben, dann wirkt dies, als wurde für jeden bezeichner-1 eine separate INITIALIZE-Anweisung in der vorgegebenen Reihenfolge angegeben. Entsteht durch eine dieser impliziten INITIALIZE-Anweisungen die Ausnahmesituation EC-DATA-CONVERSION, so wird der Programmlauf nach Ausführung einer USE-Prozedur, die mit RESUME AT NEXT STATEMENT verlassen wird, bei der nächsten impliziten INITIALIZE-Anweisung, falls vorhanden, fortgesetzt.

  4. Unabhängig davon, ob bezeichner-1 ein Datenelement oder eine Gruppe darstellt, werden alle Übertragungen so ausgeführt, als sei eine Folge von MOVE- oder SET-Anweisungen angegeben, von denen jede ein Datenelement als Empfangsfeld enthält. Die Empfangsfelder dieser impliziten Anweisungen werden in Regel 3, die Sendefelder in Regel 4 bestimmt.
    Die Initialisierung wird wie folgt durchgeführt:

    • Falls die Kategorie datenzeiger, programmzeiger oder objektreferenz ist, wirkt bezeichner-2 als Sendefeld einer impliziten SET-Anweisung, deren Empfangsfeld jeweils ein dem Bezeichner bezeichner-1 untergeordnetes elementares Empfangsfeld ist.

    • Falls die Kategorie nicht datenzeiger, programmzeiger oder objektreferenz ist, wirkt bezeichner-2 oder literal-1 als Sendefeld einer impliziten MOVE-Anweisung, deren Empfangsfeld jeweils ein dem Bezeichner bezeichner untergeordnetes elementares Empfangsfeld ist.

  5. Das Empfangsfeld in jeder impliziten MOVE- oder SET-Anweisung wird bestimmt durch die Anwendung folgender Schritte in der festgelegten Reihenfolge:

    1. Für die Ermittlung der elementaren Empfangsfelder werden zunächst folgende Datenelemente ausgeschlossen:

      1. Indexdatenfelder.

      2. Datenfelder, die einem bezeichner-1 untergeordnet sind und deren Datenerklärung die REDEFINES-Klausel enthält und Datenfelder, die einem solchen Feld untergeordnet sind.

      3. Datenfelder, die einem bezeichner-1 untergeordnet sind und deren Datenerklärung die RENAMES-Klausel enthält.

      4. FILLER-Datenelemente, wenn die Angabe WITH FILLER fehlt.

      Anmerkung:
      bezeichner-1 selbst darf jedoch in seiner Datenerklärung die REDEFINES-Klausel enthalten oder einem Datenfeld mit einer REDEFINES-Klausel untergeordnet sein.

    2. Ein Datenelement ist ein potentielles Empfangsfeld, wenn:

      1. bezeichner-1 ein Datenelement ist,

      2. oder wenn es bezeichner-1 untergeordnet ist. Wenn das Datenelement ein Tabellenelement ist, so ist jedes Vorkommen ein potentielles Empfangsfeld.

    3. Schließlich ist jedes potentielle Empfangsfeld wirklich ein Empfangsfeld, wenn mindestens eine der folgenden Bedingungen in dieser Reihenfolge zutrifft:

      1. Die INITIALIZE-Anweisung enthält die VALUE-Angabe, die Kategorie des Datenelements ist in der VALUE-Angabe explizit oder implizit enthalten und eine der folgenden Bedingungen ist erfüllt:

        1. Die Kategorie des Datenelements ist entweder datenzeiger, objektreferenz oder programmzeiger, oder

        2. eine VALUE-Klausel (beschrieben durch Format 1) ist in der Datenbeschreibung des Datenelements enthalten.

      2. Die INITIALIZE-Anweisung enthält die REPLACING-Angabe und die Kategorie des Datenelements ist eine der Kategorien aus der REPLACING-Angabe, oder

      3. die INITIALIZE-Anweisung enthält die DEFAULT-Angabe, oder

      4. die INITIALIZE-Anweisung enthält weder die VALUE-Angabe noch die REPLACING-Angabe.

      Die jeweils erste Bedingung, die für ein Datenelement zutrifft, kommt zum Zug - die nachfolgenden werden dann für dieses Datenelement nicht mehr ausgewertet.

  6. Für die Ermittlung der elementaren Sendefelder gelten die folgenden Regeln:

    1. Qualifiziert sich das Empfangsfeld aufgrund der VALUE-Angabe, so gilt:

      1. Ist das Empfangsfeld von der Kategorie datenzeiger oder programmzeiger, so ist das Sendefeld die vordefinierte Adresse NULL.

      2. Ist das Empfangsfeld von der Kategorie objektreferenz, so ist das Sendefeld die vordefinierte Objektreferenz NULL.

      3. In allen übrigen Fällen ist das Sendefeld das Literal, das in der VALUE-Klausel in der Definition des Empfangsfeld angegeben ist (siehe Abschnitt "VALUE-Klausel" Format 1 bzw. Format 3).

    2. Qualifiziert sich das Empfangsfeld aufgrund der REPLACING-Angabe, so ist das Sendefeld literal-1 oder bezeichner-2, die der Kategorie des Empfangsfelds in der REPLACING-Angabe zugeordnet sind.

    3. Wenn für das Empfangsfeld weder Regel a) noch b) zutreffen, hängt der Wert des Sendefelds wie folgt von der Kategorie des Empfangsfelds ab:.

      Kategorie des EmpfangsfeldsSendeoperand
      alphabetischFigurative Konstante alphanumerische SPACES
      alphanumerischFigurative Konstante alphanumerische SPACES
      alphanumerisch druckaufbereitetFigurative Konstante alphanumerische SPACES
      nationalFigurative Konstante nationale SPACES
      numerischFigurative Konstante ZEROES
      numerisch druckaufbereitetFigurative Konstante ZEROES
      datenzeigerVordefinierte Adresse NULL
      programmzeigerVordefinierte Adresse NULL
      objektreferenzVordefinierte Objektreferenz NULL
  7. Die durch bezeichner-1 dargestellten Datenelemente werden in der Reihenfolge ihres Auftretens (von links nach rechts) in der INITIALIZE-Anweisung mit den angegebenen Werten vorbelegt. Wenn bezeichner-1 eine Gruppe repräsentiert, werden innerhalb dieser Gruppe die betroffenen Datenelemente in der Reihenfolge ihrer Definition in der Gruppe initialisiert.

  8. Wenn bezeichner-1 und bezeichner-2 denselben Speicherplatz belegen, ist das Ergebnis der Ausführung dieser Anweisung undefiniert (siehe „Überlappende Operanden" ).

Beispiel 8-46

IDENTIFICATION DIVISION.
PROGRAM-ID. INIT1.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
    TERMINAL IS T.
DATA DIVISION.
WORKING-STORAGE SECTION.
01  LOHNSATZ.
    02  NAME       PIC X(30).
    02  VORNAME    PIC X(30).
    02  ADRESSE    PIC X(30).
02  GEBURTSDATUM.
    03
        TAG    PIC 99.
    03
        MONAT  PIC 99.
    03
        JAHR   PIC 99.
02  EINSTELLDATUM.
    03
        TAG     PIC 99.
    03
        MONAT   PIC 99.
    03
        JAHR    PIC 99.
02  STUNDENZAHL   PIC 9(3).
02  STUNDEN-SATZ  PIC 9(2)V99.
PROCEDURE DIVISION.
MAIN SECTION.
P1.
INITIALIZE LOHNSATZ.
DISPLAY LOHNSATZ UPON T.
STOP RUN.

Die Anweisung INITIALIZE LOHNSATZ bedeutet:

MOVE SPACE TO NAME VORNAME ADDRESSE
MOVE ZERO TO TAG OF GEBURTSDATUM
             MONAT OF GEBURTSDATUM
             JAHR OF GEBURTSDATUM
             TAG OF EINSTELLDATUM
             MONAT OF EINSTELLDATUM
             JAHR OF EINSTELLDATUM
             STUNDENZAHL, STUNDEN-SATZ

Beispiel 8-47

01 Datenstruktur. 
   02 alfaFeld        PIC X(20). 
   02 numFeld         PIC 9(15).
   02 zeiger          POINTER.
   02 FILLER          PIC 9(5).99.
INITIALIZE Datenstruktur FILLER
      REPLACING ALPHANUMERIC BY HIGH VALUE
                  NUMERIC BY 5
      DEFAULT

Diese INITIALIZE-Anweisung bedeutet:

MOVE HIGH-VALUE TO alfaFeld
MOVE 5 TO numFeld
SET zeiger TO NULL                  (1)
MOVE ZERO TO <FILLER-datenfeld>     (2)

(1) auf Grund der Default-Angabe
(2) auf Grund der FILLER-Angabe und der Default-Angabe

Beispiel 8-48

01 Datenstruktur. 
   02 alfaFeld        PIC X(20). 
   02 numFeld         PIC 9(15) value 1860.
   02 zeiger          POINTER.
   02 FILLER          PIC 9(5).99.
   02 objref          OBJECT REFERENCE.
INITIALIZE Datenstruktur FILLER
      ALL TO VALUE
      REPLACING ALPHANUMERIC BY LOW-VALUE
             NUMERIC BY 5
DEFAULT.

Diese INITIALIZE-Anweisung bedeutet:

MOVE LOW-VALUE TO alfaFeld
MOVE 1860 TO numFeld               (1)
SET zeiger TO NULL                 (2) 
MOVE ZERO TO <FILLER-datenfeld>    (3)
SET objref TO NULL                 (2)

(1) auf Grund der VALUE-Angabe;
      die REPLACING-Angabe für NUMERIC kommt in diesem Fall nicht mehr zum Zug
(2) auf Grund der VALUE-Angabe
(3) auf Grund der FILLER-Angabe und der Default-Angabe

Beispiel 8-49

01 Datenstruktur. 
   02 alfaFeld        PIC X(20). 
   02 numFeld         PIC 9(15).
   02 zeiger          POINTER.
   02 FILLER          PIC 9(5).99.
   02 objref          OBJECT REFERENCE.
INITIALIZE Datenstruktur
      DATA-POINTER TO VALUE
      REPLACING ALPHANUMERIC BY HIGH-VALUE
             NUMERIC BY 5
DEFAULT.

Diese INITIALIZE-Anweisung bedeutet:

MOVE HIGH-VALUE TO alfaFeld
MOVE 5 TO numFeld
SET zeiger TO NULL               (1)
SET objref TO NULL               (2)

(1) auf Grund der VALUE-Angabe;
(2) auf Grund der DEFAULT-Angabe

Beispiel 8-50

01 PTR USAGE POINTER.
...
INITIALIZE PTR DATA-POINTER TO VALUE

ist eine umständlichere Schreibweise für:

SET PTR TO NULL.

Beispiel 8-51

01 Datastructure VALUE "XXXX1234".
   02 alfaFeld          PIC X(4). 
   02 numFeld           PIC 9(4).
 
INITIALIZE Data-structure ALL TO VALUE DEFAULT

Diese INITIALIZE-Anweisung bedeutet:

MOVE SPACE TO alfaFeld
MOVE ZERO TO numFeld


Die VALUE-Angabe in der INITIALIZE-Anweisung wird nicht wirksam, da die VALUE-Klausel auf der Ebene der Datengruppe und nicht auf der Ebene der Datenelemente angegeben ist.