strLib.getNextToken

システム関数 strLib.getNextToken は、 あるトークンをサブストリングの中で検索し、そのトークンをターゲット項目にコピーします。

トークンとは、区切り文字で区切られたストリングのことです。例えば、スペース (「 」) とコンマ (「,」) の文字が区切り文字として定義されている場合、ストリング 「CALL PROGRAM ARG1,ARG2,ARG3」 は、「CALL」「PROGRAM」「ARG1」「ARG2」、および 「ARG3」 という 5 つのトークンに分解できます。


strLib.getNextToken 構文図
result
INT 型か、長さが 9 で小数部がない BIN 型と同等と定義された項目。 値は以下のいずれかです。
+n
トークン内の文字数。 トークンは、調査されているサブストリングからターゲット項目にコピーされます。
0
調査されているサブストリングの中にトークンがなかった。
-1
ターゲット項目へのコピー時にトークンが切り捨てられた。
target
CHAR 型、DBCHAR 型、HEX 型、MBCHAR 型、または UNICODE 型のターゲット項目。
source
CHAR 型、DBCHAR 型、HEX 型、MBCHAR 型、または UNICODE 型のソース項目。UNICODE 以外の型のリテラルである場合もあります。
sourceSubstringIndex
source の先頭バイトの値が 1 である場合に、 区切り文字の検索を開始する開始バイトを識別する。 sourceSubstringIndex には、INT 型または長さが 9 で小数部がない BIN 型と同等と定義された項目を使用できます。 トークンが検出されると、sourceSubstringIndex の値は、 トークンの後ろにある最初の文字の指標に変更されます。
sourceSubstringLength
調査されているサブストリング内のバイト数を示す。 sourceSubstringLength には、INT 型または長さが 9 で小数部がない BIN 型と同等と定義された項目を使用できます。 トークンが検出されると、sourceSubstringLength の値は、 戻されたトークンの後ろで始まるサブストリング内のバイト数に変更されます。
characterDelimiter
1 つ以上の区切り文字 (区切り文字と区切り文字を区切る文字はない)。 CHAR 型、DBCHAR 型、HEX 型、MBCHAR 型、または UNICODE 型の項目とすることができます。UNICODE 以外の型のリテラルである場合もあります。

後述の例に示されているとおり、sourceSubstringIndex および sourceSubstringLength の値をリセットすることなく、 サブストリング内の各トークンを検索する一連の呼び出しが可能です。

エラー条件

以下の値が sysVar.errorCode で戻されます。
8
sourceSubstringIndex が 1 より小さいか、 調査されているサブストリング内のバイト数より大きい。
12
sourceSubstringLength が 1 より小さい。
20
DBCHAR または UNICODE ストリングの sourceSubstringIndex の値が、2 バイト文字の 2 番目のバイトを参照する。
24
DBCHAR ストリングまたは UNICODE ストリングの sourceSubstringLength の値が、奇数になっています (2 バイト文字の長さは常に偶数になります)。

  Function myFunction()
    myVar myStructurePart;
    myRecord myRecordPart;
    
    i = 1;
    myVar.mySourceSubstringIndex = 1;
    myVar.mySourceSubstringLength = 29;
  	    
    while (myVar.mySourceSubstringLength > 0)
      myVar.myResult = strLib.getNextToken( myVar.myTarget[i],
        "CALL PROGRAM arg1, arg2, arg3",
          myVar.mySourceSubstringIndex,
          myVar.mySourceSubstringLength, " ," );

      if (myVar.myResult > 0)
        myRecord.outToken = myVar.myTarget[i];
        add myRecord;
        set myRecord empty;
        i = i + 1;
      end
    end
  end
  
  Record myStructurePart
    01 myTarget CHAR(80)[5];
    01 mySource CHAR(80);
    01 myResult myBinPart;
    01 mySourceSubstringIndex INT;
    01 mySourceSubstringLength BIN(9,0);
    01 i myBinPart;
  end

  Record myRecordPart
    serialRecord:
      fileName="Output"
    end
    01 outToken CHAR(80);
  end

関連する参照項目
EGL ライブラリー StrLib

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.(C) Copyright IBM Japan 2005.