Funktion
Die SIGN-Klausel beschreibt die Position und die Darstellungsart des Rechenvorzeichens für numerische Datenfelder.
Format
[SIGN IS] { LEADING | TRAILING } [SEPARATE CHARACTER]
Syntaxregeln
Die SIGN-Klausel darf nur für eine numerische Datenerklärung, die in der PICTURE-Klausel mit dem Symbol „S“ beschrieben ist, oder für eine Datengruppe, die mindestens eine solche Datenerklärung enthält, angegeben werden.
Die Datenerklärungen müssen explizit oder implizit mit USAGE IS DISPLAY beschrieben sein.
Wenn eine SIGN-Klausel für ein Gruppenfeld oder ein numerisches Datenelement angegeben ist, das einem Gruppenfeld untergeordnet ist, für das ebenfalls eine SIGN-Klausel vorliegt, dann hat die SIGN-Klausel des untergeordneten Feldes den Vorrang.
Ist die CODE-SET-Klausel angegeben, muss jede mit Vorzeichen versehene Datenerklärung mit der SIGN IS SEPARATE-Klausel beschrieben sein.
Die SIGN-Klausel gibt die Position und Darstellungsart des Rechenvorzeichens an. Wird sie für eine Datengruppe angegeben, gilt sie für jede numerische Datenerklärung innerhalb dieser Gruppe. Sie wird nur für numerische Datenerklärungen verwendet, die in der Maskenzeichenfolge das Symbol „S“ enthalten. Das „S“ zeigt lediglich das Vorhandensein, nicht jedoch die Darstellungsart des Rechenvorzeichens an.
Eine numerische Datenerklärung, deren Maskenzeichenfolge ein „S“ enthält, für die aber die SIGN-Klausel nicht angegeben wurde, hat ein Rechenvorzeichen. Die Darstellung und Position werden durch das Symbol „S“ jedoch nicht spezifiziert (Darstellung des Rechenvorzeichens siehe „USAGE-Klausel").
Allgemeine Regeln
Ist die SEPARATE CHARACTER-Angabe nicht vorhanden, gelten folgende Regeln:
Das Symbol „S“ in der Maskenzeichenfolge wird nicht zur Größe des Datenfeldes gerechnet.
Es wird angenommen, dass das Rechenvorzeichen im Platz der führenden (LEADING) bzw. der letzten (TRAILING) Ziffer des numerischen Datenelementes enthalten ist. Dabei entspricht die TRAILING-Angabe der Standardannahme dieses Compilers.
Für den Compiler ist das Rechenvorzeichen für positiv das Halbbyte C, für negativ das Halbbyte D (siehe nachfolgendes Beispiel).
Ist die SEPARATE CHARACTER-Angabe vorhanden, gelten folgende Regeln:
Das Symbol „S“ in einer Maskenzeichenfolge wird zur Größe des Datenfeldes gerechnet.
Es wird angenommen, dass das Rechenvorzeichen im Platz der führenden (LEADING) bzw. der letzten (TRAILING) Ziffer des numerischen Datenelementes enthalten ist. Diese Zeichenposition ist keine Ziffernposition.
Die Rechenvorzeichen für positiv und negativ sind standardmäßig „+“ bzw. „
-
“.
Jede numerische Datenerklärung, die in der Maskenzeichenfolge das Symbol „S“ enthält, ist eine mit Vorzeichen versehene Datenerklärung. Wird eine SIGN-Klausel für eine solche Erklärung angegeben und ist eine Konvertierung für arithmetische Operationen oder für Vergleiche notwendig, erfolgt diese Konvertierung automatisch.
Beispiel 7-27
IDENTIFICATION DIVISION. PROGRAM-ID. VZ. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. TERMINAL IS T. DATA DIVISION. WORKING-STORAGE SECTION. 01 FELD1 PIC S999 SIGN IS LEADING SEPARATE. 01 GRUPPE1 USAGE IS DISPLAY. 02 FELD2 PIC S9(5) SIGN IS TRAILING SEPARATE. 02 FELD3 PIC X(15). 02 FELD4 PIC S99 SIGN IS LEADING. 01 FELD5 PIC S9(9) SIGN IS TRAILING. PROCEDURE DIVISION. MAIN SECTION. P1. MOVE ZEROES TO FELD1 FELD2 FELD3 FELD4 FELD5. MOVE 3 TO FELD4. MOVE -2 TO FELD5. MOVE FELD4 TO FELD2. MOVE FELD2 TO FELD3. MOVE FELD5 TO FELD4. DISPLAY "FELD1 = " FELD1 UPON T. DISPLAY "FELD2 = " FELD2 UPON T. DISPLAY "FELD3 = " FELD3 UPON T. DISPLAY "FELD4 = " FELD4 UPON T. DISPLAY "FELD5 = " FELD5 UPON T. STOP RUN.
Inhalt aller Felder nach der ersten MOVE-Anweisung:
FELD1 | dezimal |
| |||||||||||||||
hexadezimal |
| ||||||||||||||||
FELD2 | dezimal |
| |||||||||||||||
hexadezimal |
| ||||||||||||||||
FELD3 | dezimal |
| |||||||||||||||
hexadezimal |
| ||||||||||||||||
FELD4 | dezimal |
| |||||||||||||||
hexadezimal |
| ||||||||||||||||
FELD5 | dezimal |
| |||||||||||||||
hexadezimal |
|
nach der zweiten MOVE-Anweisung:
FELD4 | dezimal |
| ||
hexadezimal |
|
nach der dritten MOVE-Anweisung:
FELD5 | dezimal |
| |||||||||
hexadezimal |
|
nach der vierten MOVE-Anweisung:
FELD2 | dezimal |
| ||||||
hexadezimal |
|
nach der fünften MOVE-Anweisung:
FELD3 | dezimal |
| |||||||||||||||
hexadezimal |
|
nach der sechsten MOVE-Anweisung:
FELD4 | dezimal |
| ||
hexadezimal |
|