CL

171. CLPで剰余(余り)を算出するには

CLPでは四則演算は使えるがRPGの組込み関数 %REM のような剰余計算はないので
剰余(余り)を算出することはできない。
従ってCLPの中で自分で数学的に算出するしかない。
_

-
001.00              PGM                                                         
002.00 /*-------------------------------------------------------------------*/  
003.00 /*   CRTSRCMNU  :  テンプレート・サンプル CLP  CPF9999 改訂版        */  
004.00 /*                                                                   */  
005.00 /*   2018/02/01  作成                                                */  
006.00 /*-------------------------------------------------------------------*/  
007.00              DCL        VAR(&USRLIBL) TYPE(*CHAR) LEN(2750)              
008.00              DCL        VAR(&POS) TYPE(*DEC) LEN(4 0)                    
009.00              DCL        VAR(&SHO) TYPE(*DEC) LEN(4 0) /*  商  */         
010.00              DCL        VAR(&MVR) TYPE(*DEC) LEN(4 0) /*  余り  */   
 :
0030.00 /*( 環境の取得 )*/                                   
0031.00              RTVJOBA    TYPE(&TYPE) USRLIBL(&USRLIBL)
 :
0039.00           /*---------------------------*/  
0040.00              CALLSUBR   SUBR(INZSUBR)      
0041.00           /*---------------------------*/  
 :
0096.00          /******************************/                             
0097.00              SUBR       SUBR(INZSUBR)                                 
0098.00          /******************************/                             
0099.00              CHGVAR     VAR(&POS) VALUE(%SCAN('          ' &USRLIBL)) 
0100.00              CHGVAR     VAR(&SHO) VALUE(&POS / 10)                    
0101.00              CHGVAR     VAR(&MVR) VALUE(&POS - (&SHO * 10))           
0102.00              IF         COND(&MVR > 0) THEN(DO)                       
0103.00              CHGVAR     VAR(&SHO) VALUE(&SHO + 1)                     
0104.00              ENDDO                                                    
0105.00              ENDSUBR                                                  

[解説]

変数 : &USRLIBL(ライブラリー・リスト)に含まれているライブラリーの数を
算出するには

0099.00              CHGVAR     VAR(&POS) VALUE(%SCAN('          ' &USRLIBL)) 

によって10桁のブランクが出現する位置を調べておいて

0100.00              CHGVAR     VAR(&SHO) VALUE(&POS / 10)

によって10バイトで割り算して

0101.00              CHGVAR     VAR(&MVR) VALUE(&POS - (&SHO * 10)) 

によって余り: &MVR を算出する。
余りがあれば商: &SHO に + 1する

0102.00              IF         COND(&MVR > 0) THEN(DO)                       
0103.00              CHGVAR     VAR(&SHO) VALUE(&SHO + 1)                     
0104.00              ENDDO 

_