サブストリング

文字変数を参照するすべてのコンテキストで、代わりにサブストリング (その変数内の文字の順次サブセット) を参照することができます。例えば、myVar という変数の値が「ABCD」である場合、myVar[2:3] として、2 番目と 3 番目の文字である「BC」を参照することができます。

また、ターゲット・サブストリングが固定長である場合は、assignment 文の左側にサブストリングを指定することができます。 ソースがサブストリングよりも短い場合は、サブストリングの領域にブランクが埋め込まれ、ソース・テキストがサブストリングよりも長い場合は、テキストが切り捨てられます。

ソース変数から同じ変数のサブストリングにデータを代入すると (例えば、myResult[1:5] = myResult) 問題が発生することがあります。 このようなストレージのオーバーラップの使用は、EGL デバッガーおよび EGL 生成の Java™ ではサポートされていますが、EGL 生成の COBOL ではサポートされていません。

EGL には、サブストリングを処理するシステム関数がいくつか用意されています。

構文

サブストリングの構文図
textVariable
文字または HEX 変数 (リテラルではありません)。 この変数は、システム変数または配列要素にすることができます。 limited-length string には、後で説明する特殊な考慮事項が適用されます。
fromIndex
変数から引用する最初の文字。 1 は変数内の最初の文字の索引を表します。 整数に解決される数式を使用できますが、式に、関数呼び出しを組み込むことはできません。
toIndex
変数内の求める最後の文字。ここでも 1 は文字変数の最初の文字を表し、2 は 2 番目の文字を表し、以下同様です。 整数に解決される数式を使用できますが、式に、関数呼び出しを組み込むことはできません。

fromIndextoIndex よりも大きいと、例外が発生します。

どちらの索引値もバイト位置を表しますが、textVariable が、DBCHAR 型または UNICODE 型の場合を除きます。その場合、値は 2 バイト文字の位置を表します。

textVariable がストリング (長さ制限なし) である場合、索引の値は、1 からそのストリングの長さまでの範囲になります。

textVariable が長さ制限のあるストリングである場合、索引の値は、1 から変数宣言で指定した長さまでの範囲になります。 指定した位置に文字がない場合、ターゲット・サブストリングの内容は、ターゲット・タイプに応じて変わります。 ターゲット・タイプが STRING の場合、結果は空ストリングです。 それ以外の場合、ターゲットはブランクで埋め込まれます。

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

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

フィードバック