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

VARYING 属性、VARYINGZ 属性、NONVARYING 属性

VARYING 属性と VARYINGZ 属性は、変数の長さが 0 から宣言済み 最大長までの範囲の可変長であることを指定します。 NONVARYING は、宣言した長さと等しい長さを常に持つ変数を指定します。

VARYING ストリングに割り振られるストレージは、宣言した長さよりも 2 バイト長くなります。 最左端の 2 バイトには、ストリングの現在長が入ります。

VARYINGZ 文字ストリングに割り振られたストレージは、宣言した長さよりも 1 バイト長くなります。 ストリングの現在長は、それに割り振られたストレージの 最初の '00'x の前にあるバイト数に等しくなります。

VARYINGZ GRAPHIC ストリングに割り振られるストレージは、 宣言した長さよりも 2 バイト長くなります。 ストリングの現在長は、それに割り振られたストレージの 最初の '0000'gx の前にあるバイト数に等しくなります。

VARYINGZ WIDECHAR ストリングに割り振られるストレージは、 宣言した長さよりも 2 バイト長くなります。 ストリングの現在長は、それに割り振られたストレージの 最初の '0000'wx の前にあるバイト数に等しくなります。

VARYINGZ 属性は BIT ストリングには使用できません。

下記の DECLARE ステートメントで、UserZuser は、 最大長が 15 の可変長文字データを表しています。 ただし、User とは異なり、 Zuser は NULL 終止です。 割り振られたストレージは、User の場合は 17 バイトであり、 Zuser の場合は 16 バイトです。

  declare User character (15) varying;
  declare Zuser character (15) varyingz;

UserZuser の長さは、 それぞれの時点でそれぞれに割り当てられるデータ項目の長さとなります。 MAXLENGTH 組み込み関数および LENGTH 組み込み関数を使用すると、 それぞれ宣言した長さと現在長を判別することができます。

VARYINGZ ストリング中の NULL 終止符は、ストリングの長さを判別する場合を除いては、 比較または割り当てには使用されません。 したがって、下記の宣言によるストリングの内部 16 進表示は同じですが、 比較すれば等しくはなりません

  declare A char(4) nonvarying init( ('abc' || '00'x) );
  declare B char(3) varyingz   init( 'abc' );

それとは反対に、次の例では、ZC は等しいものとして比較されます。

  dcl Z char(3) nonvarying init('abc');
  dcl C char(3) varyingz init('abc');

VARYING と VARYINGZ ストリングは、アスタリスクの長さを持つ パラメーターとして受け渡しできます。 それらが NONASSIGNABLE 属性を持っている場合、 記述子なしで渡すことができます。


Terms of use | Feedback

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