Felder redefinieren

Die Redefinition dient dazu, das Format eines Feldes zu ändern oder ein einzelnes Feld in mehrere Teile aufzuteilen.

Dieses Dokument behandelt folgende Themen:


REDEFINE-Option des DEFINE DATA-Statements

Mit der REDEFINE-Option des DEFINE DATA-Statements kann ein einzelnes Feld — entweder eine Benutzervariable oder ein Datenbankfeld — als ein neues Feld oder mehrere neue Felder redefiniert werden. Eine Gruppe kann ebenfalls redefiniert werden.

Wichtig:
Dynamische Variablen sind bei einer Redefinition nicht zulässig.

Die REDEFINE-Option redefiniert die Byte-Positionen eines Feldes von links nach rechts, unabhängig vom Format. Die Byte-Positionen des ursprünglichen Feldes und des neudefinierten Feldes bzw. der neudefinierten Felder müssen einander entsprechen.

Eine Redefinition muss unmittelbar nach der Definition des ursprünglichen Feldes angegeben werden.

Beispiel 1:

Im folgenden Beispiel wird das Datenbankfeld BIRTH als drei neue Benutzervariablen redefiniert:

DEFINE DATA LOCAL                 
01 EMPLOY-VIEW VIEW OF STAFFDDM  
  02 NAME                        
  02 BIRTH                       
  02 REDEFINE BIRTH              
     03 #BIRTH-YEAR  (N4)          
     03 #BIRTH-MONTH (N2)         
     03 #BIRTH-DAY   (N2)           
END-DEFINE 
   ...

Beispiel 2:

Im folgenden Beispiel wird die Gruppe #VAR2, die aus zwei Benutzervariablen mit Format N bzw. P besteht, als eine neue Variable vom Format A redefiniert:

DEFINE DATA LOCAL                    
01 #VAR1 (A15)                  
01 #VAR2                        
  02 #VAR2A (N4.1)             
  02 #VAR2B (P6.2)             
01 REDEFINE #VAR2 
  02 #VAR2RD (A10)
END-DEFINE 
   ...

Mit der Notation FILLER nX können Sie in dem Feld, das redefiniert wird, n Füllbytes - d.h. Segmente, die nicht benutzt werden sollen - definieren. (Nachgestellte Füllbytes müssen nicht unbedingt angegeben werden.)

Beispiel 3:

Im folgenden Beispiel wird die Benutzervariable #FIELD als drei neue Benutzervariablen, jede mit Format/Länge A2, redefiniert. Die FILLER-Notationen bedeuten, dass das 3. und 4. sowie das 7. bis 10. Byte des ursprünglichen Feldes nicht benutzt werden sollen.

DEFINE DATA LOCAL 
1 #FIELD (A12)                       
1 REDEFINE #FIELD 
  2 #RFIELD1 (A2) 
  2 FILLER 2X 
  2 #RFIELD2 (A2) 
  2 FILLER 4X 
  2 #RFIELD3 (A2) 
END-DEFINE 
...

Beispielprogramm für eine Redefinition

Das folgende Programm veranschaulicht die Anwendung einer Redefinition:

** Example 'DDATAX01': DEFINE DATA
************************************************************************
DEFINE DATA LOCAL
01 VIEWEMP VIEW OF EMPLOYEES
  02 NAME
  02 FIRST-NAME
  02 SALARY   (1:1)
*
01 #PAY       (N9)
01 REDEFINE #PAY
  02 FILLER   3X
  02 #USD     (N3)
  02 #OOO     (N3)
END-DEFINE
*
READ (3) VIEWEMP BY NAME STARTING FROM 'JONES'
  MOVE SALARY (1) TO #PAY
  DISPLAY NAME FIRST-NAME #PAY #USD #OOO
END-READ
END

Ausgabe des Programms DDATAX01:

Beachten Sie, wie das Feld #PAY und die aus seiner Redefinition resultierenden Felder angezeigt werden:

Page      1                                                  04-11-11  14:15:54
 
        NAME              FIRST-NAME         #PAY    #USD #OOO
-------------------- -------------------- ---------- ---- ----
 
JONES                VIRGINIA                  46000   46    0
JONES                MARSHA                    50000   50    0
JONES                ROBERT                    31000   31    0