%LEN 內建函數
%LEN 內建函數會傳回 CL 數值或字元變數的位數或字元數。
%LEN 內建函數可以在 CL 支援算術表示式的任何地方使用。 %LEN 可以單獨使用或作為更複雜的算術表示式的一部分。 例如, %LEN 可以用來將十進位 CL 變數的位數與 IF 或 WHEN 指令的 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))