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
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.
Dieses Statement gilt nur im Reporting Mode. Um ein Feld im Structured Mode zu
redefinieren, verwenden Sie die REDEFINE-Klausel des DEFINE
DATA-Statements.
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:
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.
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.
COMPUTE #V (N8.2) = #Y (N10) = ... REDEFINE #V (3X #A(N3) 2X #P (N2)) #Y (#B(N3) 7X)

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
#DATINT #DAY #MONTH #YEAR
--------- ---- ------ -----
20140326 26 3 2014
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.