%LEN 內建函數

%LEN 內建函數會傳回 CL 數值或字元變數的位數或字元數。

%LEN 內建函數可以在 CL 支援算術表示式的任何地方使用。 %LEN 可以單獨使用或作為更複雜的算術表示式的一部分。 例如, %LEN 可以用來將十進位 CL 變數的位數與 IFWHEN 指令的 COND 參數中的數值 CL 變數進行比較。 如果相關指令物件定義具有 EXPR (*YES) 且 TYPE 為 *DEC、 *INT2、 *INT4、 *UINT2或 *UINT4的參數,則 %LEN 也可以用來設定 CL 指令參數的值。

取得長度內建函數的格式為:
%LEN(variable-argument)

variable-argument 必須是 TYPE 為 *CHAR、*DEC、*INT 或 *UINT 的 CL 變數。

對於數值變數,傳回的值代表變數的精準度,不一定是實際有效位數。 對於 2 位元組 *INT 或 *UINT CL 變數,傳回的值一律為 5。 對於 4 位元組 *INT 或 *UINT CL 變數,傳回的值一律為 10。 對於 8 位元組 *INT CL 變數,傳回的值一律為 19。 對於 8 位元組 *UINT CL 變數,傳回的值一律為 20。

對於字元變數,傳回的值是字元數。

下列是使用 %LEN 內建函數的範例:

  • 取得數值變數的長度
    DCL VAR(&NUM1) TYPE(*DEC)
    DCL VAR(&NUM2) TYPE(*DEC) LEN(7 2)
    DCL VAR(&NUM3) TYPE(*INT) LEN(4)
    DCL VAR(&NUM4) TYPE(*UINT) LEN(2)
    DCL VAR(&RTN) TYPE(*INT) LEN(2)
    
    /* &RTN will have the value 15. */
    CHGVAR VAR(&RTN) VALUE(%LEN(&NUM1))
    /* &RTN will have the value 7. */
    CHGVAR VAR(&RTN) VALUE(%LEN(&NUM2))
    /* &RTN will have the value 10. */
    CHGVAR VAR(&RTN) VALUE(%LEN(&NUM3))
    /* &RTN will have the value 5. */
    CHGVAR VAR(&RTN) VALUE(%LEN(&NUM4))
  • 取得字元變數的長度
    DCL VAR(&CHAR1) TYPE(*CHAR)
    DCL VAR(&CHAR2) TYPE(*CHAR) LEN(20)
    DCL VAR(&RTN) TYPE(*INT) LEN(2)
    
    /* &RTN will have the value 32. */
    CHGVAR VAR(&RTN) VALUE(%LEN(&CHAR1))
    /* &RTN will have the value 20. */
    CHGVAR VAR(&RTN) VALUE(%LEN(&CHAR2))
    /* &RTN will have the value 52. */
    CHGVAR VAR(&RTN) VALUE(%LEN(&CHAR1) + %LEN(&CHAR2))