Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

REDEFINES-Klausel

&pagelevel(4)&pagelevel

Funktion

Die REDEFINES-Klausel erlaubt dem Programmierer, für einen Speicherbereich mehrere Beschreibungen anzugeben.

Format


stufennummer  [datenname-1 | FILLER] REDEFINES datenname-2


(stufennummer und datenname-1 bzw. FILLER sind nicht Teil der REDEFINES-Klausel; sie werden hier nur zur Verdeutlichung angegeben.)

Syntaxregeln

  1. Wird die REDEFINES-Klausel verwendet, so muss sie unmittelbar auf datenname-1 folgen.

  2. Die Stufennummern von datenname-1 und datenname-2 müssen identisch, dürfen aber nicht 66 oder 88 sein.

  3. Die Länge des Datenfeldes von datenname-1 muss kleiner oder gleich der Länge des Datenfeldes von datenname-2 sein, wenn die zugehörige Stufennummer ungleich 01 ist. Auf der Stufe 01 gibt es keine solche Beschränkung.

  4. datenname-2 kann gekennzeichnet, aber nicht subskribiert oder indiziert werden.

  5. Die Datenerklärung für datenname-2 darf keine OCCURS-Klausel enthalten, jedoch darf datenname-2 einem Datenfeld untergeordnet sein, das eine OCCURS-Klausel enthält. In diesem Fall darf die Bezugnahme auf datenname-2 in der REDEFINES-Klausel nicht subskribiert oder indiziert werden. Ein Datenfeld, das datenname-2 untergeordnet ist, darf eine OCCURS-Klausel ohne die DEPENDING ON-Angabe enthalten (siehe „OCCURS-Klausel").

  6. datenname-1 oder ein Datenfeld, das datenname-1 untergeordnet ist, darf eine OCCURS-Klausel ohne die DEPENDING ON-Angabe enthalten. Enthält datenname-1 eine OCCURS-Klausel, so wird die Größe von datenname-1 durch Multiplikation der Länge eines Tabellenelementes mit der Anzahl der Tabellenelemente errechnet.

  7. Die REDEFINES-Klausel darf in der FILE SECTION nicht in Erklärungen der Stufe 01 verwendet werden; eine implizite Neubelegung ist dort auf der Stufe 01 automatisch gegeben.

  8. Mehrfache Neubelegungen des Speicherbereichs sind erlaubt, sie müssen sich jedoch alle auf den Datennamen in der Originalerklärung beziehen.

  9. Erklärungen, die einen Speicherbereich neu beschreiben, dürfen mit Ausnahme der Erklärungen für Bedingungsnamen keine VALUE-Klausel enthalten.

  10. Zwischen den Erklärungen von datenname-2 und datenname-1 dürfen keine Erklärungen liegen, die eine kleinere Stufennummer haben als datenname-1 und datenname-2 ist.
    Datenerklärungen mit einer Stufennummern, die gleich der von  datenname-1 und datenname-2 ist, dürfen nur zwischen datenname-1 und datenname-2 liegen, wenn sie ebenfalls eine REDEFINES-Klausel enthalten.

  11. Die REDEFINES-Klausel darf sowohl für ein Datenfeld, das einem neu belegten Datenfeld untergeordnet ist, als auch für ein Datenfeld, das einem Datenfeld, welches eine REDEFINES-Klausel enthält, untergeordnet ist, angegeben werden.

  12. Die REDEFINES-Klausel darf nicht innerhalb einer Typdeklaration stehen.

  13. Die REDEFINES-Klausel darf nicht für Daten der Klassen objekt oder zeiger sowie für Datengruppen, die solche Daten enthalten, angegeben werden. 

  14. datenname-2 darf nicht von den Klassen objekt oder zeiger oder einer Datengruppe, die solche Daten enthält oder eine stark typisierte Datengruppe sein.

  15. datenname-2 darf nicht mit der ANY LENGTH-Klausel definiert sein.

  16. Die REDEFINES-Klausel darf nicht in der Satzbeschreibung einer XML-organisierten Datei angegeben werden.

Allgemeine Regeln

  1. datenname-1 ist der Name des mit der Neubelegung verbundenen Datenbereichs. datenname-2 ist der Name der ersten Erklärung des Datenbereichs, der neu belegt werden soll.

  2. Die Neubelegung beginnt mit datenname-2 und endet, wenn eine Stufennummer kleiner als die von datenname-2 oder gleich der von datenname-2 ist.

  3. Wird ein Bereich neu belegt, bleiben alle Erklärungen des Bereichs in Wirkung. Zum Beispiel: Wenn A und B zwei getrennte Datenfelder sind, die denselben Speicherbereich belegen, könnten die Prozeduranweisungen MOVE ALPHA TO A oder MOVE BETA TO B an irgendeiner Stelle im Programm ausgeführt werden. Im ersten Fall würde ALPHA nach A übertragen werden und würde die Darstellung annehmen, die in der Beschreibung von A angegeben wurde. Im zweiten Falle würde BETA in denselben physischen Bereich übertragen werden und würde die Darstellung annehmen, die in der Beschreibung von B angegeben wurde. Würden beide MOVE-Anweisungen unmittelbar hintereinander in der angegebenen Reihenfolge ausgeführt werden, würde der Wert von ALPHA durch den Wert von BETA überlagert werden. Die Neubelegung eines Bereiches löscht jedoch keine Daten und ersetzt keine vorangegangene Beschreibung.

  4. Die Übertragung eines Datenfeldes von A nach B, wobei B die Neubelegung von A ist, ist gleichermaßen die Übertragung von einem Datenfeld zu sich selbst. Das Ergebnis einer solchen Übertragung ist nicht vorhersagbar. Dasselbe passiert bei einer umgekehrten Übertragung: wenn A nach B übertragen wird und A B neu belegt.

  5. Die Verwendung von Datenfeldern, definiert durch die PICTURE- und USAGE-Klausel, innerhalb eines Bereichs kann neu festgelegt werden. Die Änderung der Verwendung eines Bereichs durch die REDEFINES-Klausel verändert jedoch keine vorhandenen Daten.

  6. Wird die SYNCHRONIZED-Klausel in einer Datenerklärung angegeben, die einen vorhergehenden Bereich neu belegt, muss der Benutzer darauf achten, dass der Bereich, der neu belegt wird, auf Halbwort-, Wort- und Doppelwortgrenze ausgerichtet wird.

Beispiel 7-21

02  ALPHA.
    03  A-1 PICTURE X(3).
    03  A-2 PICTURE X(2).
02  BETA REDEFINES ALPHA PICTURE 9(5).
02  GAMMA.

BETA ist datenname-1; ALPHA ist datenname-2. BETA belegt den ALPHA zugeordneten Bereich neu (d.h. den Bereich, der von A-1 und A-2 belegt ist). Die Neubelegung beginnt bei BETA und endet bei der nächsten Stufennummer 02 (die Nummer, die GAMMA vorangeht).

Beispiel 7-22

für mehrfache Neubelegungen:

   02 ALPHA PICTURE 9(3).
   02 BETA REDEFINES ALPHA PICTURE X(3).
   02 GAMMA REDEFINES ALPHA PICTURE A(3).

Beispiel 7-23

01 BEISPIEL-1.
   02  ERST-ERKLAERUNG PICTURE 99 VALUE 12.
   02  ZWEIT-ERKLAERUNG REDEFINES ERST-ERKLAERUNG
       USAGE COMPUTATIONAL PICTURE S9(4).

In diesem Beispiel ist ERST-ERKLAERUNG eine 2-Byte vorzeichenlose externe Dezimalzahl mit dem Wert 12, d.h. der Inhalt dieser 2 Bytes ist sedezimal X’F1F2’.
ZWEIT-ERKLAERUNG ist ebenfalls eine Zahl und belegt dieselben Bytes; aber diese Zahl hat nicht den Wert 12. Die Daten in diesen beiden Bytes (X’F1F2’) bleiben durch die Neubelegung unverändert; und da ZWEIT-ERKLAERUNG eine Binärzahl mit Vorzeichen ist, haben diese Daten den Wert -3598.

Beispiel 7-24

01 BEISPIEL-2.
   02 ERST-ERKLAERUNG.
      03 ALPHA                     PICTURE X(3).
      03 BETA                      PICTURE X(5).
      03 GAMMA REDEFINES BETA      PICTURE 9(5).
      03 FILLER                    PICTURE X(10).
   02 ZWEIT-ERKLAERUNG REDEFINES ERST-ERKLAERUNG PICTURE X(18).

In diesem Beispiel wird eines der Datenfelder, das ERST-ERKLAERUNG untergeordnet ist, neu belegt: GAMMA REDEFINES BETA. Das ist erlaubt und wird durch die Tatsache, dass ERST-ERKLAERUNG selbst später durch ZWEIT-ERKLAERUNG neu belegt wird, nicht blockiert.

Beispiel 7-25

01 BEISPIEL-3.
   02  ERST-ERKLAERUNG PICTURE S9(7).
   02  ZWEIT-ERKLAERUNG REDEFINES ERST-ERKLAERUNG.
       03  A-1 PICTURE A.
       03  N-1 REDEFINES A-1 PICTURE 9.
       03  FILLER PICTURE X(6).

In diesem Beispiel wird eines der Datenfelder, das ZWEIT-ERKLAERUNG untergeordnet ist, neu belegt; N-1 REDEFINES A-1. Das ist erlaubt und wird durch die Tatsache, dass ZWEIT-ERKLAERUNG selbst eine Neubelegung ist, nicht blockiert.