Dieses Dokument behandelt die zur Berechnung von Daten verwendeten arithmetischen Statements:
Außerdem werden die folgenden Statements behandelt, die die zur Übertragung des Wertes eines Operanden in eines oder mehrere Felder benutzt werden:
Wichtig:
Um die Verarbeitung zu optimieren, sollten
Benutzervariablen, die in
arithmetischen Statements verwendet werden, mit Format P (gepackt numerisch)
definiert werden.
Folgende Themen werden behandelt:
Mit dem COMPUTE
-Statement können Sie
Rechenoperationen ausführen. Die folgenden Operatoren stehen Ihnen hierbei zur
Verfügung:
**
|
Potenzierung |
---|---|
*
|
Multiplikation |
/ |
Division |
+
|
Addition |
- |
Subtraktion |
( ) |
Logische Gruppen können mittels Klammerung gebildet werden. |
COMPUTE LEAVE-DUE = LEAVE-DUE * 1.1
Der Wert des Feldes LEAVE-DUE
wird mit 1,1
multipliziert und das Ergebnis in LEAVE-DUE
gestellt.
COMPUTE #A = SQRT (#B)
Die Quadratwurzel des Feldwertes von #B
wird errechnet und
dem Feld #A
zugewiesen. SQRT
(für Square Root =
Quadratwurzel) ist eine von mehreren in Natural eingebauten mathematischen
Funktionen, die mit den folgenden Statements verwendet werden können:
Einen Überblick über die in Natural eingebauten mathematische Funktionen finden Sie im Abschnitt Mathematische Funktionen.
COMPUTE #INCOME = BONUS (1,1) + SALARY (1)
Der erste Bonus des laufenden Jahres und das derzeitige Gehalt werden
addiert, und das Ergebnis wird in das Feld #INCOME
gestellt.
Mit den Statements MOVE
und
COMPUTE
stellen Sie
den Wert eines Operanden in ein oder mehrere Felder. Der Operand kann eine
Text/Zahlenkonstante, Benutzervariable, ein Datenbankfeld, eine Systemvariable
und in bestimmten Fällen auch eine Systemfunktion sein.
Die Statements MOVE
und COMPUTE
unterscheiden
sich in ihrer Syntax dahingehend voneinander, dass beim
MOVE
-Statement der zu verschiebende Wert links angegeben wird, und
beim COMPUTE-Statement der zuzuweisende Wert rechts angegeben wird, wie
folgende Beispiele zeigen:
MOVE NAME TO #LAST-NAME COMPUTE #LAST-NAME = NAME
Mit den Statements ADD
,
SUBTRACT
,
MULTIPLY
und
DIVIDE
können Sie
Rechenoperationen ausführen.
ADD +5 -2 -1 GIVING #A SUBTRACT 6 FROM 11 GIVING #B MULTIPLY 3 BY 4 GIVING #C DIVIDE 3 INTO #D GIVING #E
Alle 4 Statements haben eine
ROUNDED
-Option,
mit der Sie gerundete Werte erhalten können.
Informationen zu Rundungsregeln entnehmen Sie dem Abschnitt Regeln für arithmetische Operationen. Weitere Informationen zu diesen Statements finden Sie in der Statements-Dokumentation.
Das folgende Programm veranschaulicht die Verwendung von Benutzervariablen in arithmetischen Statements. Es berechnet Alter und Einkommen von drei Mitarbeitern und gibt die Ergebnisse aus.
** Example 'COMPUX01': COMPUTE ************************************************************************ DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 NAME 2 BIRTH 2 JOB-TITLE 2 SALARY (1:1) 2 BONUS (1:1,1:1) * 1 #DATE (N8) 1 REDEFINE #DATE 2 #YEAR (N4) 2 #MONTH (N2) 2 #DAY (N2) 1 #BIRTH-YEAR (A4) 1 REDEFINE #BIRTH-YEAR 2 #BIRTH-YEAR-N (N4) 1 #AGE (N3) 1 #INCOME (P9) END-DEFINE * MOVE *DATN TO #DATE * READ (3) MYVIEW BY NAME STARTING FROM 'JONES' MOVE EDITED BIRTH (EM=YYYY) TO #BIRTH-YEAR SUBTRACT #BIRTH-YEAR-N FROM #YEAR GIVING #AGE /* COMPUTE #INCOME = BONUS (1:1,1:1) + SALARY (1:1) /* DISPLAY NAME 'POSITION' JOB-TITLE #AGE #INCOME END-READ END
Ausgabe des Programms COMPUX01
:
Page 1 04-11-11 14:15:54 NAME POSITION #AGE #INCOME -------------------- ------------------------- ---- ---------- JONES MANAGER 63 55000 JONES DIRECTOR 58 50000 JONES PROGRAMMER 48 31000
Mit dem COMPRESS
-Statement fassen Sie
den Inhalt zweier oder mehrerer Operanden in einem einzigen alphanumerischen
Feld zusammen.
Führende Nullen in einem numerischen Feld bzw. nachfolgende Leerstellen in einem alphanumerischen Feld werden unterdrückt, bevor der Feldwert in das Zielfeld übertragen wird.
Standardmäßig werden die übertragenen Werte im Zielfeld jeweils durch
ein Leerzeichen voneinander getrennt. Andere Trennmöglichkeiten sind in der
Statements-Dokumentation unter der
COMPRESS
-Statement-Option
LEAVING NO
SPACE
beschrieben.
COMPRESS 'NAME:' FIRST-NAME #LAST-NAME INTO #FULLNAME
In diesem Beispiel werden eine Textkonstante (’NAME:’
), ein
Datenbankfeld (FIRST−NAME
) und eine Benutzervariable
(#LAST−NAME
) mittels eines COMPRESS
-Statements in
einer Benutzervariablen (#FULLNAME
) zusammengefasst.
Weitere Informationen zum COMPRESS
-Statement finden Sie
in der Statements-Dokumentation.
Das folgende Beispiel veranschaulicht die Benutzung der Statements
MOVE
und
COMPRESS
.
** Example 'COMPRX01': COMPRESS ************************************************************************ DEFINE DATA LOCAL 1 MYVIEW VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 MIDDLE-I * 1 #LAST-NAME (A15) 1 #FULL-NAME (A30) END-DEFINE * READ (3) MYVIEW BY NAME STARTING FROM 'JONES' MOVE NAME TO #LAST-NAME /* COMPRESS 'NAME:' FIRST-NAME MIDDLE-I #LAST-NAME INTO #FULL-NAME /* DISPLAY #FULL-NAME (UC==) FIRST-NAME 'I' MIDDLE-I (AL=1) NAME END-READ END
Ausgabe des Programms COMPRX01
:
Beachten Sie vor allem die Ausgabe der mittels
COMPRESS
-Statement zusammengefassten Felder.
Page 1 04-11-11 14:15:54 #FULL-NAME FIRST-NAME I NAME ============================== -------------------- - -------------------- NAME: VIRGINIA J JONES VIRGINIA J JONES NAME: MARSHA JONES MARSHA JONES NAME: ROBERT B JONES ROBERT B JONES
Bei mehrzeiligen Ausgaben kann es sinnvoll sein, mit einem
COMPRESS
-Statement
mehrere Felder/Text in einer Benutzervariablen zusammenzufassen.
Im folgenden Programm werden drei Benutzervariablen benutzt:
#FULL-SALARY
, #FULL-NAME
und #FULL-CITY
.
In #FULL-SALARY
beispielsweise sind der Text
'SALARY:'
sowie die Datenbankfelder SALARY
und
CURR-CODE
zusammengefasst. Das WRITE
-Statement referenziert
lediglich die komprimierten Variablen.
** Example 'COMPRX02': COMPRESS ************************************************************************ DEFINE DATA LOCAL 1 VIEWEMP VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 SALARY (1:1) 2 CURR-CODE (1:1) 2 CITY 2 ADDRESS-LINE (1:1) 2 ZIP * 1 #FULL-SALARY (A25) 1 #FULL-NAME (A25) 1 #FULL-CITY (A25) END-DEFINE * READ (3) VIEWEMP BY CITY STARTING FROM 'NEW YORK' COMPRESS 'SALARY:' CURR-CODE(1) SALARY(1) INTO #FULL-SALARY COMPRESS FIRST-NAME NAME INTO #FULL-NAME COMPRESS ZIP CITY INTO #FULL-CITY /* DISPLAY 'NAME AND ADDRESS' NAME (EM=X^X^X^X^X^X^X^X^X^X^X^X) WRITE 1/5 #FULL-NAME 1/37 #FULL-SALARY 2/5 ADDRESS-LINE (1) 3/5 #FULL-CITY SKIP 1 END-READ END
Ausgabe des Programms COMPRX02
:
Page 1 04-11-11 14:15:54 NAME AND ADDRESS ----------------------- R U B I N SYLVIA RUBIN SALARY: USD 17000 2003 SARAZEN PLACE 10036 NEW YORK W A L L A C E MARY WALLACE SALARY: USD 38000 12248 LAUREL GLADE C 10036 NEW YORK K E L L O G G HENRIETTA KELLOGG SALARY: USD 52000 1001 JEFF RYAN DR. 19711 NEWARK
Bei der Verarbeitung arithmetischer Statements (ADD
,
COMPUTE
,
DIVIDE
,
SUBTRACT
,
MULTIPLY
)
unterstützt Natural die folgenden mathematischen Funktionen:
Mathematische Funktion | Natural-Systemfunktion |
---|---|
Absoluter Wert eines Feldes. | ABS(field) |
Arcustangens eines Feldes. | ATN(field) |
Kosinus eines Feldes. | COS(field) |
Potenz eines Feldes (Exponential). | EXP(field) |
Bruchteil (hinter dem Komma) eines Feldes. | FRAC(field) |
Ganzzahliger Teil eines Feldes. | INT(field) |
Natürlicher Logarithmus eines Feldes. | LOG(field) |
Vorzeichen eines Feldes. | SGN(field) |
Sinus eines Feldes. | SIN(field) |
Quadratwurzel eines Feldes (Square Root). | SQRT(field) |
Tangens eines Feldes. | TAN(field) |
Numerischer Wert eines alphanumerischen Feldes. | VAL(field) |
Weitere Einzelheiten zu mathematischen Funktionen finden Sie in der Systemfunktionen-Dokumentation.
Siehe folgende Beispielprogramme: