%LEN はフィールド内の入っている文字数を調べる組込み関数である。
先に紹介した%SIZEは変数が定義されている長さを示しているが
%LENは変数の中に収められている文字数を調べる関数である。
例えば長さ 48バイトの変数STRINGに MOVEL(P) ‘ABC’ STRING として
文字列’ABC’を代入したとすると %SIZE(STRING)は 48であるが %LEN(STRING)は 3である。
それでは %LEN の実践的な使い方を紹介しよう。
■ 効果的な組込み関数 %LEN の使い方の TESTLEN
ソースはこちらから
0001.00 H DFTNAME(TESTLEN) DATEDIT(*YMD/) BNDDIR('QC2LE') 0002.00 F********** 効果的な組込み関数 %LEN の使い方 ************************** 0003.00 F* 0004.00 F********************************************************************** 0005.00 0006.00 * CRTBNDRPG PGM(OBJLIB/TESTLEN) SRCFILE(SRCLIB/QRPGLESRC) DFTACTGRP(*NO) 0007.00 * ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL) 0008.00 0009.00 D WPERROR DS 0010.00 D EBYTESP 1 4B 0 INZ(%SIZE(EDATA)) 0011.00 0012.00 D EBYTESA 5 8B 0 0013.00 D EMSGID 9 15 0014.00 D ERESERVED 16 16 0015.00 D EDATA 17 56 0016.00 0017.00 D WRTDTA S 132A 0018.00 D WRTDTALEN S 9B 0 0019.00 D CRLF C CONST(X'15') 0020.00 0021.00 C EVAL WRTDTA = %TRIM(WRTDTA) + X'15' 0022.00 C EVAL WRTDTALEN = %LEN(%TRIM(WRTDTA)) 0023.00 /FREE 0024.00 WRTDTA = %TRIM(WRTDTA) + CRLF; 0025.00 WRTDTALEN = %LEN(%TRIM(WRTDTA)); 0026.00 /END-FREE 0027.00 C SETON LR 0028.00 C RETURN 0029.00
[解説]
TESTLEN ではトリムして改行キー(X’15’)を付加した長さを%LENで調べている。
%LEN を使わないで長さを調べるには
C ' ' CHECKR FILE23 LEN02 2 0
のような演算でも求めることができるがこの演算を見て読み手の人はこれが文字数を調べている演算であるとは誰もがすぐには気づかないだろう。
しかし%LENを使って記述すれば%LENを知らなかった人でも長さを求めていることは容易に想像がつく。
プログラムは読み手にわかりやすく記述することが一番大事であり自分が忘れてしまっても第三者にも
わかりやすい記述であれば思い出す必要もない。
このように組込み関数を使うメリットはわかりやすい記述になることでもある。
「24.文字列の中の有効な文字数を調べるには?」