Die INITIALIZE Anweisung

Die INITIALIZE-Anweisung wird, wie ihr Name schon sagt, dazu verwendet, Datenfelder zu initialisieren. Dieser Vorgang ist für einzelne Datenfelder, Datengruppen oder Tabellen durchführbar. Weiterhin ist es möglich, mit dem REPLACING-Zusatz nur ganz bestimmte Datenfelder in einer Datengruppe zu initialisieren. Der ganze Vorgang soll an einigen Beispielen verdeutlicht werden:

1. Man kann die Anweisung verwenden, um ein einzelnes Datenfeld zu initialisieren:

INITIALIZE Nummer.
Datenfeld Inhalt vorher Inhalt nachher
01 Nummer PIC 9(5). 47112 00000


Hier hätte man genauso gut mit der MOVE-Anweisung arbeiten können:
MOVE ZERO TO Nummer

...



2. Man kann mit der INITIALIZE-Anweisung auch eine ganze Datenguppe initialisieren (das ist der eigentliche Sinn dieser Anweisung):
INITIALIZE Name-Satz.
Datenfeld Inhalt vorher Inhalt nachher
01 Name-Satz.
      05 Nummer PIC *.*9(5). *.*47112 *.*00000
      05 Person.
            10 Name PIC X(30). Kasulske Spaces
            10 Vorname PIC X(30). Edwin Spaces
            10 Strasse PIC X(30). Cobolstr. 23 Spaces
            10 PLZ-Ort PIC X(30). 22056 Pilzdorf Spaces
      05 Postfach PIC X(15). FD 54-97 FRD Spaces
      05 Filler PIC X(30) VALUE ALL "!#!". !#! 10 mal !#! 10 mal
      05 Umsatz PIC 9999999V99. 000058263 000000000


Der Vorteil hier, gegenüber der MOVE-Anweisung, liegt hier darin, daß die Datenfelder innerhalb der Datengruppe gemäß ihrer Definition initialisiert werden, ohne daß man sich im Einzelnen darum kümmern müßte.

...

3. Initialisierung mit Hilfe des REPLACING-Zusatzes

INITIALIZE Name-Satz REPLACING NUMERIC DATA BY ZERO
Datenfeld Inhalt vorher Inhalt nachher
01 Name-Satz.
      05 Nummer PIC 9(5). 47112 00000
      05 Person.
            10 Name PIC X(30). Kasulske Kasulske
            10 Vorname PIC X(30). Edwin Edwin
            10 Strasse PIC X(30). Cobolstr. 23 Cobolstr. 23
            10 PLZ-Ort PIC X(30). 22056 Pilzdorf 22056 Pilzdorf
      05 Postfach PIC X(15). FD 54-97 FRD FD 54-97 FRD
      05 Filler PIC X(30) VALUE ALL "!#!". !#! 10 mal !#! 10 mal
      05 Umsatz PIC 9999999V99. 000058263 000000000


Hier werden nur die Datenfelder, die numerischen Ursprungs sind, mit Nullen initialisiert. Die übrigen Felder bleiben unberücksichtigt. Natürlich ist dies auch für alphanumerische Datenfelder möglich:

INITIALIZE Name-Satz REPLACING ALPHANUMERIC DATA BY "*"
Datenfeld Inhalt vorher Inhalt nachher
01 Name-Satz.
      05 Nummer PIC 9(5). 47112 47112
      05 Person.
            10 Name PIC X(30). Kasulske * 30 mal
            10 Vorname PIC X(30). Edwin * 30 mal
            10 Strasse PIC X(30). Cobolstr. 23 * 30 mal
            10 PLZ-Ort PIC X(30). 22056 Pilzdorf * 30 mal
      05 Postfach PIC X(15). FD 54-97 FRD * 30 mal
      05 Filler PIC X(30) VALUE ALL "!#!". !#! 10 mal !#! 10 mal
      05 Umsatz PIC 9999999V99. 000058263 000058263


Hier wurden bei der Initialisierung die alphanumerischen Datenfelder mit Sternen aufgefüllt. Weitere Möglichkeiten der gezielten initialisierung von Datenfeldern sind:

INITIALIZE Bezeichner REPLACING ALPHABETIC DATA BY Bezeichner oder Literal
INITIALIZE Bezeichner REPLACING ALPHANUMERIC-EDITED DATA BY Bezeichner oder Literal
INITIALIZE Bezeichner REPLACING NUMERIC-EDITED DATA BY Bezeichner oder Literal

...

4. Die INITIALIZE-Anweisung kann auch sehrgut zur Initialisierung von Tabellen genutzt werden.

Die Folgende Tabelle wird mit Hilfe von drei INIZIALIZE-Anweisungen in ganz bestimmten Elementen ganz bestimmt initialisiert:

01 Tabelle.
      05 Element OCCURS 12.
            10 Monat PIC X(9).
            10 Umsatz PIC 9(8)V99.


INIZIALIZE Element (5).
INITIALIZE Monat (3) BY "Re-Monat".
INITIALIZE Monat (8) BY "Abschluss".
  Vorher Nachher
St.: Monat Umsatz Monat Umsatz
(1) Mai 036456289 Mai 036456289
(2) Juni 048683617 Juni 048683617
(3) Juli 033376916 Re-Monat 033376916
(4) August 040598021 August 040598021
(5) September 041749822 Spaces 000000000
(6) Oktober 050739872 Oktober 050739872
(7) November 039289777 November 039289777
(8) Dezember 035882915 Abschluss 035882915
(9) Januar 029478653 Januar 029478653
(10) Februar 037298746 Februar 037298746
(11) März 035819942 März 035819942
(12) April 040389227 April 040389227


Natürlich können auch ganze Bereiche (Zeilen oder Spalten) der Tabelle initialisiert werden:

INITIALIZE Tabelle REPLACING NUMERIC DATA BY ZERO.
  Vorher Nachher
St.: Monat Umsatz Monat Umsatz
(1) Mai 036456289 Mai 000000000
(2) Juni 048683617 Juni 000000000
(3) Juli 033376916 Juli 000000000
(4) August 040598021 August 000000000
(5) September 041749822 September 000000000
(6) Oktober 050739872 Oktober 000000000
(7) November 039289777 November 000000000
(8) Dezember 035882915 Dezember 000000000
(9) Januar 029478653 Januar 000000000
(10) Februar 037298746 Februar 000000000
(11) März 035819942 März 000000000
(12) April 040389227 April 000000000


...