COMPRESS

#### Search Results

Search

# COMPRESS

| `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] |

Dieses Dokument behandelt folgende Themen:

- Funktion

- Syntax-Beschreibung

- Verarbeitung

- Beispiele

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

## Funktion

Das Statement `COMPRESS` dient dazu, den Inhalt eines oder mehrerer Operanden in ein einziges alphanumerisches Feld zu übertragen.

## Syntax-Beschreibung

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 `NUMERIC` werden Dezimalkommas und Vorzeichen bei numerischen Ursprungswerten unterdrückt, bevor die Werte in das Zielfeld übertragen werden. Zum Beispiel:
    COMPRESS -123  1.23 INTO #TARGET WITH DELIMITER '*'
    Content of #TARGET is: 123*123
Mit `NUMERIC` werden Dezimalkommas und Vorzeichen aus numerischen Ursprungswerten ebenfalls mit in das Zielfeld übertragen. Für Gleitkomma-Ursprungswerte werden Dezimalzeichen und Vorzeichen übertragen, ungeachtet der Tatsache, ob `NUMERIC` angegeben wurde oder nicht. 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 `FULL` werden folgende Zeichen aus den Ursprungsfeldern entfernt, bevor die Werte übertragen werden: vorangestellte Nullen vor dem Komma oder Dezimalpunkt für Felder vom Format N, P oder I, nachfolgende Nullen nach dem Komma oder Dezimalpunkt für Felder vom Format N, P, nachfolgende Leerzeichen für Felder vom Format A und führende binäre Nullen für Felder vom Format B 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 `FULL` werden die Werte der Ursprungsfelder in ihrer tatsächlichen Länge — d.h. inklusive vorangestellter Nullen und nachfolgender Leerzeichen — ins Zielfeld übertragen. Mit anderen Worten werden die folgenden Zeichen wie eingegeben angezeigt: vorangestellte Nullen vor dem Komma oder Dezimalpunkt für Felder vom Format N, P oder I nachfolgende Nullen nach dem Komma oder Dezimalpunkt für Felder vom Format N, P nachfolgende Leerzeichen für Felder vom Format A und führende binäre Nullen für Felder vom Format B 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 Wenn operand1 nicht Format A oder B hat, wird sein Inhalt in alphanumerische Darstellung konvertiert, bevor er übertragen wird. Wenn erforderlich, wird die alphanumerische Darstellung abgeschnitten. Bei Benutzung von operand1 ohne explizite Editiermaske: wird eine Zeitvariable (Format T) nur mit der Zeitkomponente des Variableninhalts, aber ohne die Datumskomponente übertragen, wird eine logische Variable (Format L) mit dem Wert `<false>` durch ein Leerzeichen und der Wert `<true>` durch das Zeichen `X` dargestellt.
`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 `COMPRESS`-Statement ohne weitere Optionen verwenden oder `LEAVING SPACE` (gilt auch standardmäßig) angeben, werden die Werte im Zielfeld jeweils durch ein Leerzeichen voneinander getrennt.
`LEAVING NO SPACE` | Keine Trennung der Werte im Zielfeld durch Leerzeichen: Wenn Sie `LEAVING NO SPACE` angeben, werden die Werte im Zielfeld weder durch ein Leerzeichen noch durch ein anderes Zeichen voneinander getrennt.
`parameter` | Parameter für Druckmodus, Datumsformat, Editiermaske: Als parameter können Sie die Session-Parameter `PM`, `DF`, `EM` oder `EMU` angeben:
PM=I | Zur Unterstützung von Sprachen, deren Schreibrichtung von rechts nach links verläuft, können Sie die Option `PM=I` angeben, um den Wert von operand1 invers (d.h. von rechts nach links) in operand2 zu übertragen. Zum Beispiel hätte als Ergebnis der folgenden Statements das Feld `#B` den Inhalt `ZYXABC`:
    MOVE 'XYZ' TO #A
    COMPRESS #A (PM=I) 'ABC'
    INTO #B LEAVING NO SPACE
Nachfolgende Leerzeichen in operand1 werden entfernt, außer wenn `FULL` angegeben ist, dann wird der Wert Zeichen für Zeichen umgedreht und anschließend in operand2 übertragen.
DF | Wenn operand1 eine Datumsvariable ist, können Sie den Session-Parameter `DF` als parameter für diese Variable angeben.
EM | Editiermaske: Einzelheiten zu Editiermasken siehe Session-Parameter `EM` in der Parameter-Referenz-Dokumentation. Der Session-Parameter `EM` kann nicht angewendet werden bei Gruppenoperanden oder wenn die `SUBSTRING`-Option benutzt wird.
EMU | Unicode-Editiermaske: Einzelheiten zu Editiermasken siehe Session-Parameter `EMU` in der Parameter-Referenz-Dokumentation. Der Session-Parameter `EMU` kann nicht angewendet werden bei Gruppenoperanden oder wenn die `SUBSTRING`-Option benutzt wird.
`SUBSTRING` `(operand1, operand3, operand4)` | SUBSTRING-Option: Wenn operand1 alphanumerisches (A), Unicode (U) oder binäres Format (B) hat, können Sie die `SUBSTRING`-Option verwenden, um nur einen Teil des Urspungsfeldes zu übertragen. Hinter dem Feldnamen (operand1) geben Sie zuerst die Startposition (operand3) und dann die Länge (operand4) des zu übertragenden Feldabschnitts ein.
`INTO SUBSTRING` `(operand2, operand5, operand6)` | INTO-Klausel: Sie können die `SUBSTRING`-Option auch in der `INTO`-Klausel verwenden, um die Urspungswerte in einen bestimmten Teil des Zielfeldes zu übertragen. Die Verwendung der `SUBSTRING`-Option in einem `COMPRESS`-Statement entspricht in beiden Fällen der in einem `MOVE`-Statement. Einzelheiten zur `SUBSTRING`-Option finden Sie beim `MOVE`-Statement.
`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 `DELIMITERS`-Option. Wenn Sie `WITH DELIMITERS` ohne operand7 angeben, werden die Werte durch das (mit der Session-Parameter `ID` definierte) Input-Delimiter-Zeichen voneinander getrennt.
`WITH DELIMITERS operand7` | Spezielles Trennzeichen: 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 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 `ALL` werden im Zielfeld Delimiter-Zeichen nur zwischen tatsächlich übertragenen Werten gesetzt. Zum Beispiel:
    COMPRESS 'A' ' ' 'C' ' ' INTO #TARGET WITH DELIMITERS '*'
    Content of #TARGET is: A*C
Mit `ALL` wird im Zielfeld auch für jeden (nicht übertragenen) Leerwert ein Delimiter-Zeichen gesetzt. Das heisst, die Anzahl der Delimiter-Zeichen im Zielfeld ist gleich der Anzahl der Urspungsfelder minus 1. Dies kann z.B. sinnvoll sein, wenn der Inhalt des Zielfeldes mit einem `SEPARATE`-Statement anschließend wieder aufgeteilt werden soll. Zum Beispiel:
    COMPRESS 'A' ' ' 'C' ' ' INTO #TARGET WITH ALL DELIMITERS '*'
    Content of #TARGET is: A**C*

## Verarbeitung

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.

## Beispiele

- Beispiel 1 — COMPRESS-Statement

- Beispiel 2 — COMPRESS-Statement mit LEAVING NO SPACE

- Beispiel 3 — COMPRESS-Statement mit WITH DELIMITER

- Beispiel 4 — COMPRESS-Statement mit Editiermasken EM

### Beispiel 1 — COMPRESS-Statement

    ** 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

### Beispiel 2 — COMPRESS-Statement mit LEAVING NO SPACE

    ** 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

### Beispiel 3 — COMPRESS-Statement mit WITH DELIMITER

    ** 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

### Beispiel 4 — COMPRESS-Statement mit Editiermasken EM

    ** 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=-999Z)
             '#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

### On this page

- Funktion
- Syntax-Beschreibung
- Verarbeitung
- Beispiele