strLib.getNextToken

La función de sistema strLib.getNextToken busca un símbolo en una subserie y copia dicho símbolo en un elemento destino.

Los símbolos son series separadas por caracteres delimitadores. Por ejemplo, si el espacio entre caracteres (" ") y la coma (",") se definen como delimitadores, la serie "CALL PROGRAM ARG1,ARG2,ARG3" puede descomponerse en cinco símbolos "CALL", "PROGRAM", "ARG1", "ARG2" y "ARG3".


Diagrama de sintaxis de strLib.getNextToken
resultado
Un elemento definido como de tipo INT o el siguiente equivalente: tipo BIN con longitud 9 y sin posiciones decimales. El valor es uno de los siguientes:
+n
Número de caracteres del símbolo. El símbolo se copia de la subserie bajo revisión al elemento destino.
0
No había ningún símbolo en la subserie bajo revisión.
-1
El símbolo se ha truncado cuando se ha copiado en el elemento destino.
destino
Elemento destino de tipo CHAR, DBCHAR, HEX, MBCHAR o UNICODE.
origen
Elemento origen de tipo CHAR, DBCHAR, HEX, MBCHAR o UNICODE. Puede ser un literal de cualquiera de esos tipos que no sea UNICODE.
índiceSubserieOrigen
Identifica el byte inicial en el que se debe empezar a buscar un delimitador, suponiendo que el primer byte de origen tiene el valor 1. índiceSubserieOrigen puede ser un elemento definido como de tipo INT o el siguiente equivalente: tipo BIN con longitud 9 y sin posiciones decimales. Si se encuentra un símbolo, el valor de índiceSubserieOrigen se cambia por el índice del primer carácter que sigue al símbolo.
longitudSubserieOrigen
Indica el número de bytes de la subserie que se está revisando. longitudSubserieOrigen puede ser un elemento definido como de tipo INT o el siguiente equivalente: tipo BIN con longitud 9 y sin posiciones decimales. Si se encuentra un símbolo, el valor de longitudSubserieOrigen se cambia por el número de bytes de la subserie que empieza después del símbolo devuelto.
carácterDelimitador
Uno o más caracteres delimitadores, sin caracteres que los separen entre sí. Puede ser un elemento de tipo CHAR, DBCHAR, HEX, MBCHAR o UNICODE. Puede ser un literal de cualquiera de esos tipos que no sea UNICODE.

Puede invocar una secuencia de llamadas para recuperar cada símbolo de una subserie sin restablecer los valores para índiceSubserieOrigen y longitudSubserieOrigen, como se muestra más adelante en un ejemplo.

Condiciones de error

En sysVar.errorCode se devuelven los siguientes valores:
8
índiceSubserieOrigen es menor que 1 o es mayor que el número de bytes de la subserie que se está revisando.
12
longitudSubserieOrigen es menor que 1.
20
El valor de índiceSubserieOrigen de una serie DBCHAR o UNICODE hace referencia al medio de un carácter de doble byte.
24
El valor de longitudSubserieOrigen de una serie DBCHAR o UNICODE es impar (las longitudes de doble byte deben ser siempre pares).

Ejemplo

  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

Consulta relacionada
Biblioteca StrLib de EGL

Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.