サブストリング

文字フィールドを参照するすべてのコンテキストで、そのフィールド内の文字の順次サブセットである サブストリングを参照することができます。 例えば、フィールド値が ABCD であれば、その 2 番目と 3 番目の文字である BC を参照できます。

さらに、ターゲット・フィールドが CHAR、DBCHAR、または UNICODE 型である場合、assignment 文の左側にサブストリングを指定することもできます。 サブストリング・エリアは充填されます (必要な場合、ブランクで埋め込まれます)。 また、代入されたテキストが、サブストリング・エリアを超えることはありません (ただし、必要な場合は、切り捨てられます)。 さらに、ターゲット・フィールドが limited-length string である場合、左側にサブストリングを指定することもできます。この状態については、後で例を挙げて説明します。

サブストリング参照の構文は、以下のとおりです。

サブストリングの構文図
itemReference
文字または 16 進数のフィールド。ただし、リテラルではないもの。 この項目は、システム変数または配列エレメントでもかまいません。 limited-length string には、後で説明する特殊な考慮事項が適用されます。
fromIndex
項目内の求める最初の文字。ここで、1 は文字項目の最初の文字を表し、2 は 2 番目の文字を表し、以下同様です。 整数に解決される数式を使用できますが、式に、関数呼び出しを組み込むことはできません。

fromIndex の値はバイト位置を表します。ただし、itemReference が DBCHAR 型または UNICODE 型の項目である場合は除きます。その場合、値は 2 バイト文字の位置を表します。

itemReference がストリング (limited length ではない) である場合、fromIndex の値は、1 から、そのストリングの長さまでの間になります。

itemReference がストリングである場合、fromIndex の値は、1 から、変数宣言で指定した長さまでの間になります。後の例で示すように、位置に値がない場合、サブストリングは空ストリングです。

アラビア語やヘブライ語などの双方向言語で作業している場合でも、左端の文字からカウントしてください。

toIndex
項目内の求める最後の文字。ここで、1 は文字項目の最初の文字を表し、2 は 2 番目の文字を表し、以下同様です。 整数に解決される数式を使用できますが、式に、関数呼び出しを組み込むことはできません。

toIndex の値はバイト位置を表します。ただし、itemReference が DBCHAR 型または UNICODE 型の項目である場合は除きます。その場合、値は 2 バイト文字の位置を表します。

itemReference がストリング (limited length ではない) である場合、toIndex の最大値は、ストリング内の最後の文字の位置になります。

itemReference が limited-length string である場合、toIndex の最大値は、変数宣言で指定した長さになります。後の例で示すように、位置に値がない場合、サブストリングは、文字のある最後の位置までしか拡張しません。

toIndex が、fromIndex より大きく、両方の数値が有効である場合、サブストリングは空ストリングになります。

アラビア語やヘブライ語などの双方向言語で作業している場合でも、左端の文字からカウントしてください。

以下の例を考えてください。
  limited string(20); 	
  s string;  	
  limited = "123456789"; 	
  s = limited[11:12]; // エラーはありません。s の値は、"" (空ストリング) です。
  s = limited[8:12];  // エラーはありません。s の値は、"89" です。	
  limited = s[8:12];  // s に長さ制限がないためのエラーです。
                      // 最後の有効位置は最後の文字があるところです。
代入文の左側に limited-length string のサブストリングを記述する場合、および fromIndex が、最後の文字を含む位置を超えている場合、EGL は、limited-length string に既にある値と代入された内容の間にある、それぞれの NULL 文字にブランクを置き換えます。
  limited string(20) = "123456789";	
  s string = "abc";
  limited[12:14] = s; // エラーはありません。制限された値は "123456789 abc" に
  なっています
:

関連概念
EGL での変数の参照

関連タスク
EGL 文およびコマンドの構文図

関連リファレンス
テキスト式

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.