getNextToken()

系统函数 StrLib.getNextToken 在子串中搜索记号并将该记号复制至目标项。

标记是用定界字符分隔的字符串。例如,如果将空格(“ ”)和逗号(“,”)字符定义为定界符,则可以将字符串“CALL PROGRAM ARG1,ARG2,ARG3”分为 5 个记号“CALL”“PROGRAM”“ARG1”“ARG2”“ARG3”

  StrLib.getNextToken(
    target VagText inOut,
    source VagText in,
    sourceSubstringIndex INT inOut,
    sourceSubstringLength INT inOut,
    characterDelimiter VagText in)
  returns (result INT)
result
被定义为具有 INT 类型或者具有以下等效类型的项:BIN 类型,长度为 9 并且不带小数位。值是下列其中一项:
+n
标记中的字符数。将把该记号从正在查看的子串复制至目标项。
0
在正在查看的子串中没有记号。
-1
记号在被复制至目标项时被截断。
target
CHAR、DBCHAR、HEX、MBCHAR 或 UNICODE 类型的目标项。
source
CHAR、DBCHAR、HEX、MBCHAR 或 UNICODE 类型的源项。可以是那些除 UNICODE 之外的任何类型的文字。
sourceSubstringIndex
在假定 source 中的第一个字节具有值 1 的情况下,标识作为定界符搜索开始位置的起始字节。sourceSubstringIndex 可以是被定义为具有 INT 类型或者具有以下等效类型的项:BIN 类型,长度为 9 并且不带小数位。如果找到记号,则将 sourceSubstringIndex 中的值更改为记号后的第一个字符的下标。
sourceSubstringLength
指示所查看的子串中的字节数。sourceSubstringLength 可以是被定义为具有 INT 类型或者具有以下等效类型的项:BIN 类型,长度为 9 并且不带小数位。如果找到记号,则 sourceSubstringLength 中的值更改为在返回的记号之后开始的子串中的字节数。
characterDelimiter
一个或多个定界字符,在各个定界字符之间没有分隔字符。可以是 CHAR、DBCHAR、HEX、MBCHAR 或 UNICODE 类型的项。可以是那些除 UNICODE 之外的任何类型的文字。

可以调用一连串的调用以检索子串中的每个记号,而不必重置 sourceSubstringIndexsourceSubstringLength 的值,如后面的示例所示。

错误状态

SysVar.errorCode 中返回下列值:
8
sourceSubstringIndex 小于 1 或大于所查看的子串中的字节数。
12
sourceSubstringLength 小于 1。
20
对于 DBCHAR 或 UNICODE 字符串,sourceSubstringIndex 中的值指的是双字节字符中的中间。
24
DBCHAR 或 UNICODE 字符串的 sourceSubstringLength 值是奇数(双字节长度必须总是偶数)。

示例

  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.