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: