RPG

453. 効果的な組込み関数の使い方 %LEN

%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.文字列の中の有効な文字数を調べるには?