| COMPRESS[NUMERIC] [FULL] | |||||
| 
 | operand1 [(parameter)] |     | |||
| 
                                         SUBSTRING(operand1,operand3,operand4)
                                   [(parameter)] | |||||
| INTO |   | operand2 | 
 | ||
| 
                                         SUBSTRING(operand2,operand5,operand6) | |||||
|   |  LEAVING[SPACE] |   | |||
| LEAVING NO[SPACE] | |||||
| WITH[ALL] [DELIMITERS] [operand7] | |||||
This document covers the following topics:
For explanations 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 COMPRESSstatement without
                                    any further options, or if you specifyLEAVING 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
                                    parameterPMor the session
                                    parameterDF: | |
| 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 operand1is a date variable, you can
                                    specify the session parameterDFasparameterfor this variable. | |
| SUBSTRING(operand1,operand3,operand4) | SUBSTRING Option:If operand1is of alphanumeric (A),
                                    Unicode (U) or binary (B) format, you can use theSUBSTRINGoption
                                    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 withoperand7.operand7must be a single character. Ifoperand7is 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