Rational Developer for System z
Enterprise PL/I for z/OS, Version 3.8, 言語解説書

ストリングの長さの変換

ソース・ストリングは、ターゲット・ストリングの左から右へ割り当てられます。 ソース・ストリングがターゲット・ストリングよりも長いときは、右側の入りきらなかった文字 、ビット、グラフィック、またはワイド文字は無視され、STRINGSIZE 条件が起こります。 ターゲット・ストリングが固定長で、ソース・ストリングよりも長いときは、ターゲット・ストリングの右側が埋め込まれます。 STRINGSIZE が割り込み禁止になっており、 ソース・ストリングやターゲット・ストリング (またはこれらの両方) の長さが 実行時に判別され、しかもターゲット・ストリングが短すぎてソース・ストリングが入りきらない場合には、 予測できない結果が発生することがあります。

注:
SUBSTR をパラメーターとして変数と一緒に使用し、 その変数がターゲットに入っていないストリングを指定すると、 STRINGRANGE 条件が使用可能になっていない場合、 予測できない結果になることがあります。

ストリングにはブランクが埋め込まれ、ビット・ストリングには '0'B、 漢字ストリングには DBCS ブランク、ワイド文字ストリングには ワイド文字ブランクがそれぞれ埋め込まれます。

  declare Subject char(10);
  Subject = 'Transformations';

'Transformations' は、15 文字です。したがって、 PL/I がそのストリングを Subject に割り当てると、 ストリングの右端から 5 文字を切り捨てます。 これは次の割り当てを実行するのと同等です。

  Subject = 'Transforma';

下に示す最初の 2 つのステートメントは、 同じ値を Subject に割り当てます。 また、最後の 2 つのステートメントは、 同じ値を Code に割り当てます。

  Subject = 'Physics';
  Subject = 'Physics   ';
  declare Code bit(10);
  Code = '110011'B;
  Code = '1100110000'B;

次の 2 つのステートメントは、Subject に 同等の値を割り当てません

  Subject = '110011'B;
  Subject = '1100110000'B;

最初のステートメントが実行されると、右側のビット定数がまず文字ストリングに 変換されてから、ビットのゼロではなくブランク文字が右側に埋め込まれます。 このステートメントは次のステートメントと同等です。

  Subject = '110011bbbb';

この 2 つのステートメントの 2 番目のステートメントでは、 ビットから文字タイプへの変換が必要です。 これは次のステートメントと同等です。

  Subject = '1100110000';

ストリング値が、VARYING 属性を持つストリング変数に割り当てられるときは、ブランク文字またはゼロのビットによる埋め込みは行われません。 代わりに、ターゲット・ストリング変数の長さが、割り当てられたストリングの長さにセットされます。 ただし、割り当てられたストリングが、可変長ストリング変数で宣言されている 最大の長さより長いときは、切り捨てが行われます。


Terms of use | Feedback

This information center is powered by Eclipse technology. (http://www.eclipse.org)