グラフィック ストリング データ (DBCS サポート)

GRAPHIC ストリングは DBCS 文字 (2 バイト文字) のシーケンスです。グラフィック ストリングまたはシーケンス内の DBCS 文字の数のことを、グラフィック ストリングまたはシーケンスの長さと呼びます。Open PL/I では、グラフィック ストリング値の最大長さは DBCS 文字 16383 個です。

長さゼロのグラフィック ストリングはヌルのグラフィック ストリングと呼ばれます。

グラフィック ストリング変数またはグラフィック ストリング値を使用する関数は、次の属性を使用して宣言します:

GRAPHIC(n)

または

GRAPHIC(n) VARYING

または

GRAPHIC(n) VARYING BIGENDIAN

n は、変数で保持できる、または関数から返すことができるすべてのグラフィック ストリング値の最大の長さです。G を GRAPHIC の同義語として使用できます。

VARYING 属性を指定すると、ストリング変数または関数で可変長の値を保持または返すことができます。内部的には、可変長ストリングの長さが値とともに記録されます。可変長ストリングの場合、最大長さ n に合わせてパディングされることはありません。記憶域における可変長ストリング変数の表現では、変数は最大 n 文字を持つことができ、現在のストリングの長さは、値の一部として保持されます。デフォルトで、固定長バイナリ (15) データ アイテムに対してマシンが使用するネイティブのアーキテクチャに従って、長さフィールドが格納されます。BIGENDIAN 属性が指定された場合、長さフィールドはビッグ エンディアン形式で格納されます。

VARYING 属性がない場合、グラフィック ストリング変数または関数は、常に n の長さの値を保持または返します。非可変長ストリングへの割り当てでは常に、長さが短い値の右側に DBCS 空白が追加され、n グラフィック文字の長さまで拡張されます。

n を上回るグラフィック文字のストリングを、VARYING または非可変長のストリング変数に割り当てた場合、左側の n グラフィック文字だけが割り当てられ、残りの文字は切り捨てられます。

グラフィック ストリング値は、DBCS バイトペアのバイナリ値を使用して左側から右側に向かって比較されます。長さが同一でないグラフィック ストリングを比較するときには、右側に DBCS 空白を付加されて短いほうのストリングが拡張されます。

非可変長のグラフィック ストリング変数は常に n*2 バイトの記憶域を使用します。配列の要素または構造体のメンバーである場合は、次に使用可能なバイトから開始され、語またはその他の記憶アドレスの境界に合わせて整列されることはありません。そのため、非可変長の文字の配列は、単一のワイド文字列であるかのように格納およびアクセスできます。

可変長のグラフィック ストリング変数は常に (n*2)+2 バイトの記憶域を使用します。最初の 2 バイトに、現在変数に格納されているワイド文字列の長さを指定する整数 L (0 <= L <= n) が格納されます。2 バイトの長さフィールドに続き、文字列のテキストが先頭の L*2 バイトの記憶域に格納されます。変数の最後の n-L バイトペアは未定義です。値 L には LENGTH 組み込み関数を使用してアクセスできます。

グラフィック可変長ストリングの整列については、『Open PL/I ユーザー ガイド』を参照してください。

制限事項

  • ソース ファイル内の GRAPHIC 文字はサポートされません。
  • G 文字列定数はサポートされません。
  • GRAPHIC(x) VARYINGZ はサポートされません。
  • ソース コードに埋め込まれた DBCS SISO シーケンスはサポートされません。
  • 混合データはサポートされません。
  • M 定数はサポートされません。
  • 次を使用した場合、GRAPHIC データ型はサポートされません:-ebcdic コンパイラ オプション。

グラフィック ストリング定数

グラフィック ストリング定数はグラフィック ストリング 16 進数リテラルとして記述する必要があります。次に例を示します。

Dcl gstr graphic (12) init(‘82678285828C828C828F81408276828F8292828C82848144'Gx) ; 

DBCS バイトペアを使用するグラフィック文字列リテラルが ASCII 照合シーケンスに対応する場合は、ASCII 文字列リテラルが使用され、設定されたコードページを使用してコンパイラが GRAPHIC 型への適切な内部変換を実行します。

次に例を示します。

Dcl gstr graphic(12) init ('Hello World.');

コードページ 932 - SHIFT-JIS を使用した場合、上記と同等です。