サブストリング
文字変数を参照するすべてのコンテキストで、代わりにサブストリング (その変数内の文字の順次サブセット) を参照することができます。例えば、myVar という変数の値が「ABCD」である場合、myVar[2:3] として、2 番目と 3 番目の文字である「BC」を参照することができます。
また、ターゲット・サブストリングが固定長である場合は、assignment 文の左側にサブストリングを指定することができます。 ソースがサブストリングよりも短い場合は、サブストリングの領域にブランクが埋め込まれ、ソース・テキストがサブストリングよりも長い場合は、テキストが切り捨てられます。
ソース変数から同じ変数のサブストリングにデータを代入すると (例えば、myResult[1:5] = myResult) 問題が発生することがあります。 このようなストレージのオーバーラップの使用は、EGL デバッガーおよび EGL 生成の Java™ ではサポートされていますが、EGL 生成の COBOL ではサポートされていません。
構文

- textVariable
- 文字または HEX 変数 (リテラルではありません)。 この変数は、システム変数または配列要素にすることができます。 limited-length string には、後で説明する特殊な考慮事項が適用されます。
- fromIndex
- 変数から引用する最初の文字。 1 は変数内の最初の文字の索引を表します。 整数に解決される数式を使用できますが、式に、関数呼び出しを組み込むことはできません。
- toIndex
- 変数内の求める最後の文字。ここでも 1 は文字変数の最初の文字を表し、2 は 2 番目の文字を表し、以下同様です。
整数に解決される数式を使用できますが、式に、関数呼び出しを組み込むことはできません。
fromIndex が toIndex よりも大きいと、例外が発生します。
どちらの索引値もバイト位置を表しますが、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 に長さ制限がないためのエラーです。
// 最後の有効位置は最後の文字があるところです。
limited string(20) = "123456789";
s string = "abc";
limited[12:14] = s; // エラーはありません。
制限された値は "123456789 abc" になっています
: