REDEFINE

REDEFINE

operand1 (

nX )
operand2

Dieser Abschnitt behandelt folgende Themen:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Gehört zur Funktionsgruppe: Reporting Mode-Statements


Funktion REDEFINE

Das Statement REDEFINE dient dazu, ein Feld zu redefinieren. Das Ergebnis der Neudefinition können eine oder mehrere Benutzervariablen sein.

Mit einem REDEFINE-Statement können Sie gleichzeitig mehrere Felder redefinieren.

Einschränkung bei REDEFINE

Dieses Statement gilt nur im Reporting Mode. Um ein Feld im Structured Mode zu redefinieren, verwenden Sie die REDEFINE-Klausel des DEFINE DATA-Statements.

Syntax-Beschreibung REDEFINE

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1   S A G   A U N P I F B D T L C     ja nein
operand2   S A G   A   N P I F B D T L C     ja ja

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
REDEFINE operand1 operand2
Methode der Redefinition:

Die Byte-Positionen von operand1 werden unabhängig vom Format von links nach rechts redefiniert.

Das Format von operand2 muss nicht mit dem von operand1 identisch sein. Jedoch sollten die Daten an den Byte-Positionen von operand2 mit den Formatangaben für operand2 übereinstimmen, um unerwünschte Ergebnisse im Ausgabe-Report zu vermeiden. Wenn beispielsweise ein alphanumerisches Feld in ein numerisches Feld redefiniert wird und keine numerischen Daten gemäß der Formatangabe enthält, kann die Verwendung des Feldes einen Programmabbruch zur Folge haben. Eine empfohlene Vorgehensweise zur Überprüfung numerischer Werte in einem alphanumerischen Feld finden Sie unter .

Weitere Redefinition:

Ein mit einem REDEFINE-Statement neudefiniertes Feld kann mit einem weiteren REDEFINE-Statement nochmals redefiniert werden.

n X
Füllbyte-Notation:

Mit der Notation nX können Sie in der redefinierten Variable oder dem nachgestellten Feld n Füllbytes definieren. Nachgestellte Füllbytes müssen nicht unbedingt angegeben werden.

Beispiele REDEFINE

Beispiel 1 - REDEFINE-Statement

Die Benutzervariable #A (Format/Länge A10) enthält den Wert 123ABCDEFG.

REDEFINE #A (#A1(N3) #A2(A7)) 

#A1 erhält den Wert 123, #A2 den Wert ABCDEFG.

Beispiel 2 - REDEFINE-Statement

Die Benutzervariable #B (Format/Länge A10) enthält den hexadezimalen Wert 12345CC1C2C3C4C5C6C7.

REDEFINE #B (#B1(P4) #B2(A7)) 

#B1 erhält den hexadezimalen Wert 12345C, #B2 den hexadezimalen Wert C1C2C3C4C5C6C7.

REDEFINE #B (#BB1(B2)8X)) or REDEFINE #B(#BB1(B2)) 

#BB1 erhält den hexadezimalen Wert 1234.

Der Wert in #BB1 ist "1234" (im Hexadezimalformat).

Anmerkung
Beim Format P (gepackt numerisch) muss die Anzahl der benötigten Dezimalstellen angegeben werden. Die Anzahl der Bytes, die eine gepackte Zahl benötigt, lässt sich wie folgt berechnen:

Anzahl der Bytes = (Anzahl der Dezimalstellen + 1) / 2, auf ganze Bytes aufgerundet.

Beispiel 3 - REDEFINE-Statement

COMPUTE #V (N8.2) = #Y (N10) = ...
REDEFINE #V (3X  #A(N3)  2X  #P (N2))  #Y (#B(N3)  7X)   

Example

Beispiel 4 - REDEFINE-Statement

In diesem Beispiel wird die Systemvariable *DATN, die die Form YYYYMMDD hat, redefiniert und das Ergebnis in der Reihenfolge Tag/Monat/Jahr (DAY/MONTH/YEAR) in drei getrennte Felder geschrieben:

MOVE *DATN TO #DATINT (N8)
REDEFINE #DATINT (#YEAR (N4) #MONTH (N2) #DAY (N2))
DISPLAY NOTITLE #DATINT #DAY #MONTH #YEAR
END

Ausgabe:

 #DATINT  #DAY #MONTH #YEAR
--------- ---- ------ -----
                           
 20140326  26    3     2014

Beispiel 5: Überprüfung numerischer Werte in einem alphanumerischen Feld

Wenn ein alphanumerisches Feld, das sowohl Buchstaben als auch Zahlen enthält, als numerisches Feld neu definiert wird, kann der Zugriff auf einen Wert, der für das numerische Format ungültig ist, zu einem Abbruch führen. Wenn Sie in einem alphanumerischen Feld auf einen numerischen Wert prüfen müssen, wird empfohlen, die Option IS zu verwenden. Der numerische Wert kann dann mit der Funktion VAL.

Beispiel:

DEFINE DATA LOCAL
1 #A (A4)
1 REDEFINE #A
 2 #N(N4)
END-DEFINE
#A := '-123'
IF #A IS (N4) THEN /* check if #A can be converted to numeric format
 #N := VAL(#A)     /* get the numeric value
 WRITE "TRUE"
ELSE
 WRITE "FALSE"     / * #A contains non-numeric characters and cannot be converted.
END-IF
END

Im obigen Beispiel enthält #A den Zeichenwert '-123'. Obwohl #A als alphanumerisches Feld definiert ist, prüft die Bedingung IS (N4), ob sein Inhalt als numerischer Wert interpretiert werden kann. Da '-123' ein gültiger numerischer Wert ist, ist die Bedingung wahr, und mit VAL(#A) kann der numerische Wert in #N ermittelt werden.

IF #N = -123
...
END-IF

Das obige Beispiel zeigt, dass der Zugriff auf ein als numerisch definiertes Feld, das nicht-numerische Zeichen enthält, zu einem nicht normalen Verhalten führen kann. Daher werden die Funktionen IS und VAL beim Zugriff auf ein neu definiertes numerisches Feld empfohlen.