COMPRESS [NUMERIC] [FULL]
|
|||||
|
|
operand1 [(parameter)] |
|
|||
SUBSTRING (operand1,operand3,operand4) [(parameter)]
|
|||||
nX |
|||||
INTO
|
|
operand2 |
|
||
SUBSTRING
(operand2,operand5,operand6)
|
|||||
|
|
LEAVING [SPACE]
|
|
|||
LEAVING NO [SPACE]
|
|||||
WITH [ALL] [DELIMITERS] [operand7]
|
|||||
Dieser Abschnitt 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 | L | 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:
| Syntax-Element | Beschreibung | |
|---|---|---|
NUMERIC
|
Behandlung von Vor- und Dezimalzeichen:
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-Ursprungswerte 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
|
Behandlung von Ursprungsfeldwerten:
Ohne
Enthält ein numerisches Ursprungsfeld 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
|
Ursprungsfelder:
Als operand1 geben Sie die Felder an, deren Inhalt übertragen werden soll. Anmerkung Bei Benutzung von operand1 ohne explizite Editiermaske:
|
|
nX |
Einfügen eines Abstandelements:
Mit der Notation Bei Verwendung von Bei Verwendung von Die maximal zulässige Länge beträgt Bei Verwendung von Beispiele: COMPRESS ‘A’ 2X ‘B’ INTO #T WITH DELIMITER ‘,’
-> #T = ‘A, ,B’
COMPRESS ‘A’ 2X ‘B’ INTO #T LEAVING NO SPACE
-> #T = ‘A B’
COMPRESS 'Error' 1X #ERR 1X 'came from DB file (' #DBID '/' #FNR ')' INTO #T LEAVING NO SPACE
-> #T = ‘Error 1234 came from DB file (10/32)’
Siehe auch Beispiel 5 - COMPRESS-Statement mit Abstandselement. |
|
operand2
|
Zielfeld
Als operand2 geben Sie das Feld an, das die Werte aus den Ursprungsfeldern aufnehmen soll. Wenn das Zielfeld das Format U (Unicode) hat, und wenn es sich um ein Ursprungsfeld mit Format B handelt, muss die Länge des sendenden Binärfeldes gleich sein. |
|
LEAVING SPACE
|
Trennung der Werte im Zielfeld durch Leerzeichen:
Wenn Sie das |
|
LEAVING NO SPACE
|
Keine Trennung der Werte im Zielfeld durch
Leerzeichen:
Wenn Sie |
|
parameter
|
Parameter für Druckmodus, Datumsformat,
Editiermaske:
Als parameter können Sie die Session-Parameter
|
|
| 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 |
|
| EM | Editiermaske:
Einzelheiten zu Editiermasken siehe Session-Parameter Der Session-Parameter |
|
| EMU | Unicode-Editiermaske:
Einzelheiten zu Editiermasken siehe Session-Parameter Der Session-Parameter |
|
SUBSTRING
(operand1, operand3,
operand4) |
SUBSTRING-Option:
Wenn operand1 alphanumerisches (A), Unicode (U) oder
binäres Format (B) hat, können Sie die |
|
INTO SUBSTRING
(operand2, operand5,
operand6) |
INTO-Klausel:
Sie können die Die Verwendung der |
|
WITH DELIMITERS
|
Trennzeichen bei Werten im Zielfeld:
Möchten Sie, dass die Werte im Zielfeld jeweils durch ein Trennzeichen
voneinander getrennt werden, dann verwenden Sie die
Wenn Sie |
|
WITH DELIMITERS operand7
|
Spezielles Trennzeichen:
Wenn Sie Wenn operand7 eine Variable ist, muss sie Format/Länge (A1) oder (B1) haben. Wenn das Zielfeld das Format A oder B hat, muss das Format bzw. die Länge des Trennzeichens (A1), (B1) oder (U1) sein. Wenn das Zielfeld das Format U (Unicode) hat, muss das Format bzw. die Länge des Trennzeichens (A1), (B2) oder (U1) sein. |
|
WITH ALL
|
Anwendung der Trennzeichen:
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 Quelloperanden verarbeitet worden
sind. Es werden keine Zeichen abgeschnitten. Die Länge von
operand2 nach der COMPRESS-Operation entspricht
dann der gemeinsamen Länge der Quelloperanden. 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
** Example 'CMPEX4': COMPRESS (with edit mask EM)
************************************************************************
DEFINE DATA LOCAL
1 #A10 (A10) INIT <'ABCDEF'>
1 #I4 (I4) INIT <-123>
1 #T (T) INIT <E'2021-11-22 10:24:36'>
1 #L (L) INIT <TRUE>
1 #RESULT (A70)
END-DEFINE
*
COMPRESS '#A:' #A10 (EM=X_X_X)
'#I4:' #I4 (EM=-9999)
'#T:' #T (EM=YYYY-MM-DD_HH:II)
'#L:' #L (EM=FALSE/TRUE) INTO #RESULT
PRINT #RESULT
END
Ausgabe des Programms CMPEX4:
#A: A_B_C #I4: -0123 #T: 2021-11-22_10:24 #L: TRUE
** Example 'CMPEX5': COMPRESS (with spacer element)
************************************************************************
DEFINE DATA LOCAL
1 #A10 (A10) INIT <'ABCDEF'>
1 #I4 (I4) INIT <-123>
1 #T (T) INIT <E'2001-11-22 10:24:36'>
1 #L (L) INIT <TRUE>
*
1 #FIELD1 (A16) INIT <'First name'>
1 #FIELD2 (A16) INIT <'Name'>
1 #FIELD3 (A16) INIT <'Birth'>
1 #VALUE1 (A32) INIT <'John'>
1 #VALUE2 (A32) INIT <'Smith'>
1 #VALUE3 (D) INIT <D'2005-05-01'>
*
1 #ERROR (I2) INIT <76>
1 #TEXT (A40) INIT <'Error occurs in library'>
1 #LIBRARY (A8) INIT <'XYZ'>
1 #DBID (I4) INIT <88>
1 #FNR (I4) INIT <317>
*
1 #RESULT (A70)
END-DEFINE
*
* Use spacer elements and values directly followed by comma or period
*
COMPRESS 'Values found:' 1X #A10 (EM=X_X_X) ','
1X
#I4 (EM=-9999) ','
1X
#T (EM=YYYY-MM-DD' 'HH:II) ','
1X
#L (EM=FALSE/TRUE) '.'
INTO #RESULT LEAVING NO SPACE
PRINT #RESULT //
*
* Use spacer elements and delimiter asterisk
*
COMPRESS '#A10:' #A10 (EM=X_X_X)
3X
'#I4:' #I4 (EM=-9999)
3X
'#T:' #T (EM=YYYY-MM-DD' 'HH:II)
3X
'#L:' #L (EM=FALSE/TRUE)
INTO #RESULT WITH DELIMITER '*'
PRINT #RESULT //
*
* Use spacer elements and asterisks for extra styling
*
COMPRESS #FIELD1 ':' 1X #VALUE1 3X '***' 3X
#FIELD2 ':' 1X #VALUE2 3X '***' 3X
#FIELD3 ':' 1X #VALUE3 (EM=DD.L(10)' 'YYYY)
INTO #RESULT LEAVING NO SPACE
PRINT #RESULT //
*
* Use spacer elements in complex text string
*
COMPRESS 'ERR' #ERROR (EM=9999) 2X
#TEXT 1X '<' #LIBRARY '>' 1X
'with DBID=' #DBID ',' 1X 'FNR=' #FNR '.'
INTO #RESULT LEAVING NO SPACE
PRINT #RESULT
*
END
Values found: A_B_C, -0123, 2001-11-22 10:24, TRUE.
#A10:*A_B_C* *#I4:*-0123* *#T:*2001-11-22 10:24* *#L:*TRUE
First name: John *** Name: Smith *** Birth: 01.May 2005
ERR0076 Error occurs in library <XYZ> with DBID=88, FNR=317.