グラフィック文字列データ (DBCS サポート)

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

長さゼロのグラフィック文字列は null グラフィック文字列と呼ばれます。

グラフィック文字列変数またはグラフィック文字列値を使用する関数は、次の属性を使用して宣言します。

GRAPHIC(n)

または

GRAPHIC(n) VARYING

または

CHARACTER(n) VARYINGZ

または

GRAPHIC(n) VARYING BIGENDIAN

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

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

VARYINGZ (VARZ) 属性を指定すると、文字列変数または関数で可変長の値を保持または返すことができます。varyingz グラフィック文字列は、内部的には、'0000'x バイトで終了する文字のシーケンスとして格納されます。最大長さ n に合わせて空白詰めされることはありません。記憶域における可変長文字列変数の表現では、変数は最大 n 文字 (2 バイト文字) を持つことができます。

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 組み込み関数を使用してアクセスできます。

varyingz のグラフィック文字列変数は常に n+1 の 2 バイトの記憶域を使用します。varyingz 文字列の現在の長さ L は、最初の '0000'x の 2 バイトの位置によって決まります (L = index(string, '0000'Gx) - 1)。2 バイトの終端文字 '00x' に続き、文字列のテキストが先頭の L の 2 バイトの記憶域に格納されます。変数の最後の n-L の 2 バイトは未定義です。値 L には LENGTH 組み込み関数を使用してアクセスできます。varyingz グラフィック文字列の配列は、単一の文字列であるかのようにアクセスできません。

グラフィック可変長文字列の整列については、『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 を使用した場合、上記と同等です。