getNextToken()

strLib.getNextToken() 시스템 함수는 토큰의 하위 문자열을 검색하고 해당 토큰을 대상 항목에 복사합니다.

토큰은 구분 문자로 구분되는 문자열입니다. 예를 들어, 공백 문자(" ")와 쉼표 문자(",")가 구분 기호로 정의된 경우 문자열 "CALL PROGRAM ARG1,ARG2,ARG3"를 다섯 개의 토큰 "CALL", "PROGRAM", "ARG1", "ARG2", "ARG3"로 나눌 수 있습니다. 함수는 문자열 내의 토큰 위치를 가리키는 색인 값을 기반으로 한 번에 한 토큰씩 페치합니다.

구문

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
문자가 서로 연결된 하나 이상의 구분 문자입니다. 이 변수 또는 리터럴을 source와 동일한 유형으로 작성하십시오.
token
토큰이 발견되면 source가 지정된 유형과 동일한 유형으로 토큰이 리턴됩니다. 토큰을 찾을 수 없는 경우에는 함수가 널값을 리턴합니다.
result
토큰의 문자 수를 포함하는 INT입니다. result의 다음 값은 특수한 의미를 갖습니다.
함수가 토큰을 찾을 수 없습니다.
-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
첫 번째 바이트의 값이 1인 경우 source에서 토큰을 검색하기 시작할 시작 바이트를 식별하는 INT 변수입니다. 토큰이 발견되면 index의 값이 토큰 뒤에 오는 첫 번째 바이트의 색인으로 변경됩니다. 토큰을 찾을 수 없는 경우에는 index가 변경되지 않습니다.
substringLength
검토 중인 source의 하위 문자열에 있는 바이트 수를 표시하는 INT입니다. 토큰이 발견되면 substringLength의 값이 리턴된 토큰 이후 시작되는 하위 문자열의 바이트 수로 변경됩니다.
delimiters
문자가 서로 연결된 하나 이상의 구분 문자입니다. 입력은 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을 예외 처리(throw)합니다.
  • index가 1보다 작습니다.
  • index가 소스 문자열의 길이보다 깁니다.
  • index가 짝수이고 source는 UNICODE 또는 DBCHAR 유형입니다.
V6 예외 모드에서 실행 중인 경우가 아니면 오류 발생 시 함수의 호환성(5개의 매개변수) 양식에서 RuntimeException을 예외 처리(throw)합니다. 다음 조건이 모두 참인 경우에는 V6 예외 모드에서 실행 중인 것입니다.
  • v60ExceptionCompatibility 프로그램 특성을 YES로 설정했습니다.
  • 다음 중 하나가 참입니다.
    • vgvar.handleSysLibErrors 시스템 변수를 1로 설정했습니다.
    • try 블록에서 함수를 호출했습니다.
V6 예외 모드에서 다음 값은 sysVar.errorCode에서 리턴됩니다.
8
index가 1보다 작거나 검토 중인 하위 문자열의 바이트 수보다 큽니다.
12
substringLength가 0보다 작습니다.
20
DBCHAR 또는 UNICODE 문자열에 대한 index의 값이 2바이트 문자의 중간을 가리킵니다.
24
DBCHAR 또는 UNICODE 문자열의 substringLength 값이 홀수입니다(2바이트 길이는 항상 짝수여야 함).

호환성 고려사항

표 1. 호환성 고려사항
플랫폼 문제
JavaScript 생성 strLib.getNextToken() 함수는 지원되지 않습니다.