getNextToken()
strLib.getNextToken() システム関数は、サブストリングでトークンを検索し、そのトークンをターゲット項目にコピーします。
トークン とは、区切り文字で区切られたストリングのことです。例えば、スペース (「 」) とコンマ (「,」) が区切り文字として定義されている場合、ストリング 「CALL PROGRAM ARG1,ARG2,ARG3」 は、「CALL」、「PROGRAM」、「ARG1」、「ARG2」、および 「ARG3」 という 5 つのトークンに分解できます。 関数は、ストリング内のトークンの位置を参照する索引値に基づいて、一度に 1 つのトークンを取り出します。
構文
strLib.getNextToken() 関数は、多重定義されます。 したがって、パラメーターと戻り値の構成は異なるが、名前が同じである関数を呼び出すことができます。 以下の形式の関数が優先されます。
strLib.getNextToken(
source STRING | CHAR | DBCHAR | MBCHAR | UNICODE inOut,
index INT inOut,
delimiters STRING | CHAR | DBCHAR | MBCHAR | UNICODE in)
returns (token STRING? | CHAR? | DBCHAR? | MBCHAR? | UNICODE?)
- source
- 上記のいずれかの型と代入互換性のある任意の値を入力することができます。
- index
- source の先頭バイトの値が 1 である場合に、トークンの検索を開始する開始バイトを識別する INT 変数。 トークンが検出されると、index の値は、トークンに続く先頭バイトの索引に変更されます。 トークンが検出されない場合、index は変更されません。
- delimiters
- 1 つ以上の区切り文字 (区切り文字と区切り文字を区切る文字はない)。 これを source と同じ型の変数またはリテラルにします。
- token
- 検出されたトークンは、source が代入されたのと同じ型として戻されます。 トークンが検出されない場合、関数は NULL 値を戻します。
- result
- トークン内の文字数を含む INT。
result の以下の値は、特別な意味を持ちます。
- null
- 関数でトークンは検出されませんでした。
- -1
- トークンは target へのコピーの際に切り捨てられました。
以下のフォームは前のバージョンとの互換性に対して有効です。
strLib.getNextToken(
target CHAR | DBCHAR | MBCHAR | UNICODE inOut,
source CHAR | DBCHAR | MBCHAR | UNICODE in,
index INT inOut,
substringLength INT inOut,
delimiters STRING in)
returns (result INT)
- target
- ターゲット変数は、関数がトークン (検出した場合) を配置する場所です。 target は、少なくとも上記のいずれかの型と代入互換性がなければなりません。
- source
- target と同じ型を入力する必要があります。
- index
- source の開始バイトを識別する INT 変数。最初のバイトの値が 1 である場合に、そのバイトからトークンの検索を開始します。 トークンが検出されると、index の値が、トークンに続く最初のバイトの索引に変更されます。 トークンが検出されない場合、index は変更されません。
- substringLength
- 対象となる source サブストリング内のバイト数を示す INT。 トークンが検出されると、substringLength の値は、 戻されたトークンの後から始まるサブストリング内のバイト数に変更されます。
- delimiters
- 1 つ以上の区切り文字 (区切り文字と区切り文字を区切る文字はない)。 STRING 型との代入互換性のある任意の変数または式を入力できます。
- result
- トークン内の文字数を含む INT。
result の以下の値は、特別な意味を持ちます。
- 0
- 関数でトークンは検出されませんでした。
- -1
- トークンは target へのコピーの際に切り捨てられました。
例
この例では、プログラムは、i の更新された値を使用してストリング全体をループし、配列内にトークンを保存します。
commandLine string = "CALL PROG1 arg1,arg2";
delimiters string = " ,"; // space and comma delimiters
i int = 1;
max int;
tokens string[0];
token string? = "";
function main()
max = strLib.byteLen(commandLine);
// end processing when the getNextToken function returns a null
while(i < max && token != null)
token = StrLib.getNextToken(commandLine, i, delimiters);
if (token != null)
tokens.appendElement(token);
end
end
end
エラー条件
以下のいずれかに該当する場合、優先 (3 パラメーター) 形式の関数によって、egl.core.IndexOutOfBoundsException がスローされます。
- index が 1 未満である。
- index がソース・ストリングの長さより大きい。
- index が偶数で、source が UNICODE 型または DBCHAR 型である。
エラーが発生した場合、互換性 (5 パラメーター) 形式の関数によって RuntimeException がスローされます (V6 の例外モードで実行している場合を除く)。
以下のすべての条件が真である場合は、V6 の例外モードで実行しています。
- v60ExceptionCompatibility プログラム・プロパティーに YES を設定している。
- 以下のいずれかに該当する。
- vgvar.handleSysLibErrors システム変数を 1 に設定している、または、
- try ブロックから関数を呼び出している。
- 8
- index が 1 未満であるか、検討中のサブストリング内のバイト数より大きくなっています。
- 12
- substringLength が 0 未満になっています。
- 20
- DBCHAR または UNICODE ストリングの index の値が、2 バイト文字の 2 番目のバイトを参照しています。
- 24
- DBCHAR ストリングまたは UNICODE ストリングの substringLength の値が、奇数になっています (2 バイト文字の長さは常に偶数でなければなりません)。
互換性に関する考慮事項
| プラットフォーム | 問題 |
|---|---|
| JavaScript 生成 | 関数 strLib.getNextToken() はサポートされていません。 |