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]
|
This document covers the following topics:
For an explanation of the symbols used in the syntax diagram, see Syntax Symbols.
Related Statements: ASSIGN
| COMPUTE
|
EXAMINE
|
MOVE
|
MOVE ALL
|
SEPARATE
Belongs to Function Group: Arithmetic and Data Movement Operations
The COMPRESS
statement is used to transfer (combine) the
contents of one or more operands into a single field.
Operand Definition Table:
Operand | Possible Structure | Possible Formats | Referencing Permitted | Dynamic Definition | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1
|
C | S | A | G | N | A | U | N | P | I | F | B | D | T | G | O | yes | no | ||
operand2
|
S | A | U | B | yes | yes | ||||||||||||||
operand3
|
C | S | N | P | I | B* | yes | no | ||||||||||||
operand4
|
C | S | N | P | I | B* | yes | no | ||||||||||||
operand5
|
C | S | N | P | I | B* | yes | no | ||||||||||||
operand6
|
C | S | N | P | I | B* | yes | no | ||||||||||||
operand7
|
C | S | A | U | B | yes | no |
* Format B of
operand3
,
operand4
,
operand5
and
operand6
may be used only with a length
of less than or equal to 4.
Syntax Element Description:
Syntax Element | Description | |
---|---|---|
NUMERIC |
Handling of Sign Characters:
This option determines how sign characters and decimal characters are to be handled: Without COMPRESS -123 1.23 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: 123*123 With For floating point source values, decimal points and signs are
transferred, regardless of whether Example 1:
COMPRESS NUMERIC -123 1.23 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: -123*1.23 Example 2:
COMPRESS NUMERIC 'ABC' -0056.00 -0056.10 -0056.01 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC*-56*-56.1*-56.01 Example 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
|
Handling of Source Field Values:
Without
For a numeric source field containing all zeros, one zero will be transferred. For example: COMPRESS 'ABC ' 001 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC*1 With
are displayed as entered. For example: COMPRESS FULL 'ABC ' 001 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC *001 |
|
operand1
|
Source Fields:
As Note: If |
|
operand2
|
Target Field:
As If the target field is of format U (Unicode) and if a source field of format B is involved, the length of the sending binary field must be even. |
|
LEAVING SPACE
|
Values in Target Field Separated by a Blank: If you use the
COMPRESS statement without any further options, or if you specify
LEAVING SPACE (which also applies by default), the values in the
target field will be separated from one another by a blank.
|
|
LEAVING NO
SPACE
|
Values in Target Field Not Separated: If you specify LEAVING NO
SPACE , the values in the target field will not be separated from one
another by a blank or any other character.
|
|
parameter
|
Print Mode/Date Format Parameters: As
parameter , you can specify the session
parameter PM or the session
parameter DF :
|
|
PM=I |
In order to support languages whose writing direction is from right
to left, you can specify MOVE 'XYZ' TO #A COMPRESS #A (PM=I) 'ABC' INTO #B LEAVING NO SPACE Any trailing blanks in
|
|
DF |
If operand1 is a date
variable, you can specify the session parameter
DF as
parameter for this variable.
|
|
SUBSTRING
(operand1 ,
operand3 ,
operand4 )
|
SUBSTRING Option: If
operand1 is of alphanumeric (A),
Unicode (U) or binary (B) format, you can use the SUBSTRING option
to transfer only a certain part of a source field. After the field name
(operand1 ) you
specify first the starting position
(operand3 ) and then the length
(operand4 ) of the field portion to be
transferred.
|
|
INTO SUBSTRING
(operand2 ,
operand5 ,
operand6)
|
INTO Clause:
Also, you can use the In both cases, the use of the |
|
WITH DELIMITERS
|
Input Delimiter Character:
If you wish the values in the target field to be separated from one
another by a specific character, you use the If you specify |
|
WITH DELIMITERS
operand7
|
Specific Delimiter Character: If you specify WITH
DELIMITERS operand7 , the values will be
separated by the character specified with
operand7 .
operand7 must be a single character. If
operand7 is a variable, it must be of
format/length (A1) or (B1).
If the target field is of format A or B, the format/length of the delimiter has to be (A1), (B1) or (U1). If the target field is of format U (Unicode), the format/length of the delimiter has to be (A1), (B2) or (U1). |
|
WITH ALL
|
Handling of Delimiters:
Without COMPRESS 'A' ' ' 'C' ' ' INTO #TARGET WITH DELIMITERS '*' Content of #TARGET is: A*C With COMPRESS 'A' ' ' 'C' ' ' INTO #TARGET WITH ALL DELIMITERS '*' Content of #TARGET is: A**C* |
A destination field of format B is handled like a destination field of format A.
The COMPRESS
operation terminates when either all operands
have been processed or the target field (operand2
)
is filled.
If the target field contains more positions than all operands combined,
all remaining positions of operand2
will be filled with blanks. If the target field is shorter, the value will be
truncated.
If operand2
is a dynamic
variable, the COMPRESS
operation terminates when all source
operands have been processed. No truncation will be performed. The length of
operand2
after the
COMPRESS
operation will correspond to the combined length of the
source operands. The current length of a dynamic variable can be ascertained by
using the system variable *LENGTH
.
This section covers the following topics:
** 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
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
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
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