連結演算を指定するには、連結挿入文字でオペランド同士を結び付けます。
||
この連結記号は、左側のオペランドの最後の文字、ビット、 グラフィック、またはワイド文字のすぐあとに (間に何もはさまずに)、 右側のオペランドの最初の文字、ビット、グラフィック、または ワイド文字が続く形で、2 つのオペランドを結合することを表します。
連結演算はストリング (文字、ビット、グラフィック、または ワイド文字) にしか行えないので、 連結演算子を使用すると、ストリング・タイプへの変換が行われることがあります。 結果は、RULES コンパイラー・オプションの設定値に応じて異なります。
RULES(IBM) を指定する場合、連結演算子は以下のように振る舞います。
以下に例を示します。
dcl B bin(4) initial(4),
C bit(1) initial('1'b);
put skip list (B || C);
/* Produces '01001' not 'bbb41' */
RULES(ANS) を指定する場合、連結演算子は以下のように振る舞います。
以下に例を示します。
dcl B bin(4) initial(4),
C bit(1) initial('1'b);
put skip list (B || C);
/* Produces 'bbb41', not '01001' */
連結演算の結果は、2 つのオペランドの長さの合計に等しい長さを持つストリング であり、そのタイプ (文字、ビット、グラフィック、または ワイド文字) は、2 つのオペランドのタイプと同じです。
連結のためにオペランドの変換が必要であった場合は、オペランド変換後のストリングの長さによって結果の長さが決まります。
| オペランドと値 | 演算 | 結果 |
|---|---|---|
|
A = '010111'B B = '101'B C = 'xy,Z' D = 'aa/BB' |
A || B |
'010111_101'B |
|
A || A || B |
'010111_010111_101'B |
|
|
C || D |
'xy,Zaa/BB' |
|
|
D || C |
'aa/BBxy,Z' |
|
|
B || D |
'101aa/BB' |
上記の最後の例では、ビット・ストリング '101'B が文字ストリング '101' に変換されてから、連結が行われます。 結果は、文字ストリングになります。