COMPRESS [NUMERIC ] [FULL ]
|
|||||
operand1 [(parameter)] | |||||
SUBSTRING (operand1, operand3, operand4)
[(parameter)]
|
|||||
INTO
|
operand2 | ||||
SUBSTRING
(operand2, operand5, operand6)
|
|||||
LEAVING SPACE
|
|||||
LEAVING NO
[SPACE ]
|
|||||
WITH [ALL ] [DELIMITER S ] [operand7]
|
Dieses Dokument behandelt folgende Themen:
Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.
Verwandte Statements: ASSIGN | COMPUTE | EXAMINE | MOVE | MOVE ALL | SEPARATE
Gehört zur Funktionsgruppe: Arithmetische Funktionen und Datenzuweisungen
Das Statement COMPRESS
dient dazu, den Inhalt eines oder
mehrerer Operanden in ein einziges alphanumerisches Feld zu übertragen.
Operanden-Definitionstabelle:
Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 | C | S | A | G | N | A | U | N | P | I | F | B | D | T | G | O | ja | nein | ||
operand2 | S | A | U | B | ja | ja | ||||||||||||||
operand3 | C | S | N | P | I | B* | ja | nein | ||||||||||||
operand4 | C | S | N | P | I | B* | ja | nein | ||||||||||||
operand5 | C | S | N | P | I | B* | ja | nein | ||||||||||||
operand6 | C | S | N | P | I | B* | ja | nein | ||||||||||||
operand7 | C | S | A | U | B | ja | nein |
* Format B von operand3, operand4, operand5 und operand6 kann nur mit einer Länge von kleiner oder gleich 4 benutzt werden.
Syntax-Element-Beschreibung:
NUMERIC |
Diese Option bestimmt, wie Vorzeichen und Dezimalzeichen behandelt werden: Ohne COMPRESS -123 1.23 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: 123*123 Mit Für Gleitkomma-Ausgangswerte werden Dezimalzeichen und Vorzeichen
übertragen, ungeachtet der Tatsache, ob Beispiel 1:
COMPRESS NUMERIC -123 1.23 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: -123*1.23 Beispiel 2:
COMPRESS NUMERIC 'ABC' -0056.00 -0056.10 -0056.01 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC*-56*-56.1*-56.01 Beispiel 3:
COMPRESS NUMERIC FULL 'ABC' -0056.00 -0056.10 -0056.01 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC*-0056.00*-0056.10*-0056.01 |
|
---|---|---|
FULL |
Ohne
Enthält ein numerisches Ausgangsfeld lauter Nullen, wird eine Null (0) übertragen. Zum Beispiel: COMPRESS 'ABC ' 001 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC*1 Mit
Beispiel: COMPRESS FULL 'ABC ' 001 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC *001 |
|
operand1 |
Ausgangsfelder:
Mit operand1 geben Sie die Felder an, deren Inhalt übertragen werden soll. Anmerkung: Wenn operand1 eine Zeitvariable (Format T) ist, wird nur die Zeitkomponente des Variableninhalts übertragen, aber nicht die Datumskomponente. |
|
operand2 |
Zielfeld
Mit operand2 geben Sie das Feld an, das die Werte aus den Ausgangsfeldern aufnehmen soll. Wenn das Zielfeld vom Format U (Unicode) hat, und wenn es sich um ein Ausgangsfeld mit Format B handelt, muss die Länge des sendenden Binärfeldes gleich sein. |
|
LEAVING SPACE | Wenn Sie das
COMPRESS -Statement ohne weitere Optionen verwenden oder
LEAVING SPACE (gilt auch standardmäßig) angeben, so werden die
Werte im Zielfeld jeweils durch ein Leerzeichen voneinander getrennt.
|
|
LEAVING NO SPACE | Wenn Sie LEAVING NO
SPACE angeben, werden die Werte im Zielfeld weder durch ein Leerzeichen
noch durch ein anderes Zeichen voneinander getrennt.
|
|
parameter | Als
parameter können Sie die Option
PM=I oder den
Session-Parameter DF angeben:
|
|
PM=I |
Zur Unterstützung von Sprachen, deren Schreibrichtung von rechts
nach links verläuft, können Sie die Option Zum Beispiel hätte als Ergebnis der folgenden Statements das
Feld MOVE 'XYZ' TO #A COMPRESS #A (PM=I) 'ABC' INTO #B LEAVING NO SPACE Nachfolgende Leerzeichen in operand1
werden entfernt (außer wenn |
|
DF |
Wenn operand1 eine Datumsvariable ist,
können Sie den Session-Parameter |
|
SUBSTRING (operand1, operand3, operand4) |
Wenn operand1 alphanumerisches (A),
Unicode (U) oder binäres Format (B) hat, können Sie die
|
|
INTO SUBSTRING (operand2, operand5, operand6) |
Sie können die Die Verwendung der |
|
WITH DELIMITERS |
Möchten Sie, dass die Werte im Zielfeld jeweils durch ein
bestimmtes Zeichen voneinander getrennt werden, dann verwenden Sie die
Wenn Sie |
|
WITH DELIMITERS operand7 | Wenn Sie WITH DELIMITERS
operand7 angeben, werden die Werte durch das
mit operand7 angegebene Zeichen voneinander
getrennt. operand7 muss ein einzelnes Zeichen sein.
Wenn operand7 eine Variable ist, muss sie Format/Länge A1 oder B1 haben. Wenn das Zielfeld vom Format A oder B ist, muss das Format bzw. die Länge des Trennzeichens (A1), (B1) oder (U1) sein. Wenn das Zielfeld vom Format U (Unicode) ist, muss das Format bzw. die Länge des Trennzeichens (A1), (B2) oder (U1) sein. |
|
WITH ALL |
Ohne COMPRESS 'A' ' ' 'C' ' ' INTO #TARGET WITH DELIMITERS '*' Content of #TARGET is: A*C Mit COMPRESS 'A' ' ' 'C' ' ' INTO #TARGET WITH ALL DELIMITERS '*' Content of #TARGET is: A**C* |
Ein Zielfeld vom Format B wird wie ein Zielfeld vom Format A behandelt.
Die COMPRESS
-Operation wird beendet, sobald entweder alle
Operanden übertragen sind oder das Zielfeld
(operand2) voll ist.
Ist das Zielfeld länger als alle übertragenen Werte zusammen, so werden die verbleibenden Stellen von operand2 mit Leerzeichen gefüllt. Ist das Zielfeld kürzer, wird der Wert abgeschnitten.
Falls operand2 eine dynamische Variable ist,
wird die COMPRESS
-Operation beendet, wenn alle Ausgangs-Operanden
verarbeitet worden sind. Es werden keine Zeichen abgeschnitten. Die Länge von
operand2 nach der COMPRESS
-Operation
entspricht dann der gemeinsamen Länge der Ausgangs-Operanden. Die aktuelle
Länge einer dynamischen Variable kann durch die Systemvariable
*LENGTH
bestimmt werden.
** Example 'CMPEX1': COMPRESS ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 NAME 2 FIRST-NAME 2 MIDDLE-I * 1 #COMPRESSED-NAME (A20) END-DEFINE * LIMIT 4 READ EMPLOY-VIEW BY NAME COMPRESS FIRST-NAME MIDDLE-I NAME INTO #COMPRESSED-NAME DISPLAY NOTITLE FIRST-NAME MIDDLE-I NAME 5X #COMPRESSED-NAME END-READ * END
Ausgabe des Programms CMPEX1
:
FIRST-NAME MIDDLE-I NAME #COMPRESSED-NAME -------------------- -------- -------------------- -------------------- KEPA ABELLAN KEPA ABELLAN ROBERT W ACHIESON ROBERT W ACHIESON SIMONE ADAM SIMONE ADAM JEFF H ADKINSON JEFF H ADKINSON
** Example 'CMPEX2': COMPRESS (with LEAVING NO SPACE) ************************************************************************ DEFINE DATA LOCAL 1 EMPL-VIEW VIEW OF EMPLOYEES 2 NAME 2 CURR-CODE (1) 2 SALARY (1) * 1 #CCSALARY (A20) END-DEFINE * LIMIT 4 READ EMPL-VIEW BY NAME COMPRESS CURR-CODE (1) SALARY (1) INTO #CCSALARY LEAVING NO SPACE DISPLAY NOTITLE NAME CURR-CODE (1) SALARY (1) 5X #CCSALARY END-READ * END
Ausgabe des Programms CMPEX2
:
NAME CURRENCY ANNUAL #CCSALARY CODE SALARY -------------------- -------- ---------- -------------------- ABELLAN PTA 1450000 PTA1450000 ACHIESON UKL 11300 UKL11300 ADAM FRA 159980 FRA159980 ADKINSON USD 34500 USD34500
** Example 'CMPEX3': COMPRESS (with delimiter) ************************************************************************ DEFINE DATA LOCAL 1 EMPL-VIEW VIEW OF EMPLOYEES 2 NAME 2 CURR-CODE (1) 2 SALARY (1) * 1 #CCSALARY (A20) END-DEFINE * LIMIT 4 READ EMPL-VIEW BY NAME COMPRESS CURR-CODE (1) SALARY (1) INTO #CCSALARY WITH DELIMITER '*' DISPLAY NOTITLE NAME CURR-CODE (1) SALARY (1) 5X #CCSALARY END-READ * END
Ausgabe des Programms CMPEX3
:
NAME CURRENCY ANNUAL #CCSALARY CODE SALARY -------------------- -------- ---------- -------------------- ABELLAN PTA 1450000 PTA*1450000 ACHIESON UKL 11300 UKL*11300 ADAM FRA 159980 FRA*159980 ADKINSON USD 34500 USD*34500