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
bezeichner-1 ist das Empfangsfeld der INITIALIZE-Anweisung. literal-1 und bezeichner-2 sind Sendefelder.
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.
Jede Datenkategorie darf nur einmal in der VALUE-Angabe und in der REPLACING-Angabe genannt werden.
Die Datenerklärung von bezeichner-1 oder eines Datenfeldes, das bezeichner-1 untergeordnet ist, darf nicht die DEPENDING-Angabe der OCCURS-Klausel enthalten.
Ein Indexdatenfeld darf nicht als Operand einer INITIALIZE-Anweisung auftreten.
Die Datenerklärung von bezeichner-1 darf nicht die RENAMES-Klausel enthalten.
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
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.
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.
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.
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.
Das Empfangsfeld in jeder impliziten MOVE- oder SET-Anweisung wird bestimmt durch die Anwendung folgender Schritte in der festgelegten Reihenfolge:
Für die Ermittlung der elementaren Empfangsfelder werden zunächst folgende Datenelemente ausgeschlossen:
Indexdatenfelder.
Datenfelder, die einem bezeichner-1 untergeordnet sind und deren Datenerklärung die REDEFINES-Klausel enthält und Datenfelder, die einem solchen Feld untergeordnet sind.
Datenfelder, die einem bezeichner-1 untergeordnet sind und deren Datenerklärung die RENAMES-Klausel enthält.
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.Ein Datenelement ist ein potentielles Empfangsfeld, wenn:
bezeichner-1 ein Datenelement ist,
oder wenn es bezeichner-1 untergeordnet ist. Wenn das Datenelement ein Tabellenelement ist, so ist jedes Vorkommen ein potentielles Empfangsfeld.
Schließlich ist jedes potentielle Empfangsfeld wirklich ein Empfangsfeld, wenn mindestens eine der folgenden Bedingungen in dieser Reihenfolge zutrifft:
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:
Die Kategorie des Datenelements ist entweder datenzeiger, objektreferenz oder programmzeiger, oder
eine VALUE-Klausel (beschrieben durch Format 1) ist in der Datenbeschreibung des Datenelements enthalten.
Die INITIALIZE-Anweisung enthält die REPLACING-Angabe und die Kategorie des Datenelements ist eine der Kategorien aus der REPLACING-Angabe, oder
die INITIALIZE-Anweisung enthält die DEFAULT-Angabe, oder
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.
Für die Ermittlung der elementaren Sendefelder gelten die folgenden Regeln:
Qualifiziert sich das Empfangsfeld aufgrund der VALUE-Angabe, so gilt:
Ist das Empfangsfeld von der Kategorie datenzeiger oder programmzeiger, so ist das Sendefeld die vordefinierte Adresse NULL.
Ist das Empfangsfeld von der Kategorie objektreferenz, so ist das Sendefeld die vordefinierte Objektreferenz NULL.
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).
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.
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 Empfangsfelds Sendeoperand alphabetisch Figurative Konstante alphanumerische SPACES alphanumerisch Figurative Konstante alphanumerische SPACES alphanumerisch druckaufbereitet Figurative Konstante alphanumerische SPACES national Figurative Konstante nationale SPACES numerisch Figurative Konstante ZEROES numerisch druckaufbereitet Figurative Konstante ZEROES datenzeiger Vordefinierte Adresse NULL programmzeiger Vordefinierte Adresse NULL objektreferenz Vordefinierte Objektreferenz NULL
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.
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.