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]
|
|||||
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント:ASSIGN | COMPUTE | EXAMINE | MOVE | MOVE ALL | SEPARATE
関連機能グループ:算術演算とデータ移動操作
COMPRESS ステートメントは、1 つ以上のオペランドの内容を単一の英数字フィールドへ転送(結合)するために使用します。
オペランド定義テーブル:
| オペランド | 構文要素 | フォーマット | オペランド参照 | ダイナミック定義 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 |
C | S | A | G | N | A | U | N | P | I | F | B | D | T | G | O | ○ | × | ||
operand2 |
S | A | U | B | ○ | ○ | ||||||||||||||
operand3 |
C | S | N | P | I | B* | ○ | × | ||||||||||||
operand4 |
C | S | N | P | I | B* | ○ | × | ||||||||||||
operand5 |
C | S | N | P | I | B* | ○ | × | ||||||||||||
operand6 |
C | S | N | P | I | B* | ○ | × | ||||||||||||
operand7 |
C | S | A | U | B | ○ | × | |||||||||||||
* operand3、operand4、operand5 および operand6 のフォーマット B は、4 以下の長さでのみ使用できます。
構文要素の説明:
| 構文要素 | 説明 | |
|---|---|---|
NUMERIC |
符号文字の処理:
このオプションは、符号文字や小数文字の扱いを指定します。
COMPRESS -123 1.23 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: 123*123
浮動小数点の値については、 例 1
COMPRESS NUMERIC -123 1.23 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: -123*1.23 例 2:
COMPRESS NUMERIC 'ABC' -0056.00 -0056.10 -0056.01 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC*-56*-56.1*-56.01 例 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 |
ソースフィールド値の処理:
すべて 0 の数値ソースフィールドについては 1 つの 0 が転送されます。例えば、次のようになります。 COMPRESS 'ABC ' 001 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC*1
これらは入力したとおりに表示されます。例えば、次のようになります。 COMPRESS FULL 'ABC ' 001 INTO #TARGET WITH DELIMITER '*' Content of #TARGET is: ABC *001 |
|
operand1 |
ソースフィールド:
注意:
|
|
operand2 |
ターゲットフィールド:
ターゲットフィールドがフォーマット U(Unicode)であり、フォーマット B のソースフィールドが含まれている場合、送信するバイナリフィールドの長さを同じにする必要があります。 |
|
LEAVING
SPACE |
空白で区切られたターゲットフィールドの値: 追加オプションを一切指定しないで COMPRESS ステートメントを使用したか、または LEAVING SPACE(デフォルトでも適用される)を指定した場合、ターゲットフィールド内の値は互いに空白で区切られます。
|
|
LEAVING NO
SPACE |
区切られていないターゲットフィールドの値: LEAVING NO SPACE が指定されると、ターゲットフィールド内の各値の間には、空白も文字も入りません。
|
|
parameter |
出力モード/日付フォーマットパラメータ: parameter では、セッションパラメータ PM またはセッションパラメータ DF を指定できます。
|
|
PM=I |
右から左に記述する言語をサポートするために、 MOVE 'XYZ' TO #A COMPRESS #A (PM=I) 'ABC' INTO #B LEAVING NO SPACE
|
|
DF |
operand1 が日付変数の場合、この変数に対する parameter としてセッションパラメータ DF を指定できます。
|
|
SUBSTRING (operand1、operand3、operand4)
|
SUBSTRING オプション: operand1 が英数字(A)、Unicode(U)、またはバイナリ(B)フォーマットの場合、SUBSTRING オプションを使用して、ソースフィールドの特定部分だけを転送できます。フィールド名(『operand1』)の後に、まず開始位置(operand3)を指定してから、フィールドの転送される部分の長さ(operand4)を指定してください。
|
|
INTO
SUBSTRING (operand2、operand5、operand6)
|
INTO 節:
どちらの場合も、 |
|
WITH
DELIMITERS |
入力デリミタ文字
|
|
WITH DELIMITERS
operand7 |
特定のデリミタ文字 WITH DELIMITERS operand7 を指定すると、値は operand7 に指定した文字で区切られます。operand7 は、1 文字にする必要があります。operand7 が変数の場合は、そのフォーマット/長さを(A1)または(B1)にする必要があります
ターゲットフィールドがフォーマット A または B の場合は、デリミタ文字のフォーマット/長さを(A1)、(B1)、または(U1)にする必要があります。 ターゲットフィールドがフォーマット U(Unicode)の場合は、デリミタ文字のフォーマット/長さを(A1)、(B2)、または(U1)にする必要があります。 |
|
WITH
ALL |
デリミタの処理:
COMPRESS 'A' ' ' 'C' ' ' INTO #TARGET WITH DELIMITERS '*' Content of #TARGET is: A*C
COMPRESS 'A' ' ' 'C' ' ' INTO #TARGET WITH ALL DELIMITERS '*' Content of #TARGET is: A**C* |
|
フォーマット B の転送先フィールドは、フォーマット A の転送先フィールドと同様に処理されます。
COMPRESS 操作は、全オペランドの処理が終了するか、またはターゲットフィールド(operand2)に空きがなくなると終了します。
ターゲットフィールドが全オペランドの合計桁数よりも大きい場合、operand2 の残りの部分は空白となります。ターゲットフィールドの方が小さい場合、値は切り捨てられます。
operand2 がダイナミック変数である場合、COMPRESS 操作は全ソースオペランドが処理されると終了します。値の切り捨ては行われません。COMPRESS 操作後の operand2 の長さは、ソースオペランドの合計の長さに対応します。ダイナミック変数の現在の長さは、システム変数 *LENGTH を使用して確認できます。
このセクションでは、次のトピックについて説明します。
** 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