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]
|
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント: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 のフォーマット B、operand4、operand5、および operand6 は、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 |
ソースフィールド:
operand1 では、内容が転送されるフィールドを指定します。 注意: operand1 が時刻変数(フォーマット T)の場合は、変数内容のうち時刻コンポーネントのみが転送され、日付コンポーネントは転送されません。 |
|
operand2 |
ターゲットフィールド:
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 operand1 の末尾にある空白はすべて削除され( |
|
DF | operand1 が日付変数の場合、変数に対する parameter としてセッションパラメータ DF を指定できます。
|
|
SUBSTRING (operand1, operand3, operand4) | operand1 が英数字(A)、Unicode(U)、またはバイナリ(B)フォーマットの場合、SUBSTRING オプションを使用して、ソースフィールドの特定部分だけを転送できます。 フィールド名(operand1)の後に、まず開始位置(operand3)を指定してから、フィールドの転送される部分の長さ(operand4)を指定してください。
|
|
INTO SUBSTRING (operand2, operand5, operand6) |
どちらの場合も、 |
|
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 が DYNAMIC 変数である場合、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