RPG

220. 文字フィールドの先行ゼロの消去

RPG で数字をメッセージ出力するには、一旦、文字フィールドに変換してから
その文字フィールドを出力するようにしなければならない。
DSPLY 命令では 数字フィールドを直接、出力することはできないからだ。

しかし、かと言って CLP には数字フィールドの値を簡単に文字フィールドに
編集できる関数は用意されていない。
CHGVAR コマンドで数字を文字に変換しただけでは先行ゼロが残ってしまい、

    00003 個のオブジェクトが見つかった。

のように、見づらいメッセージになってしまう。
そこでここでは簡単にゼロ・サプレス、つまり先行ゼロを RPG 内で消去する方法を
紹介しよう。

【サンプル・ソース:TESTBIN】
0001.00 H DFTNAME(TESTBIN) DATEDIT(*YMD/)                                  
0002.00 F******** TESTBIN :  先行ゼロの消去 ****************************** 
0003.00 F*                                                                 
0004.00 F*  CRTBNDRPG TESTBIN  DFTACTGRP(*NO) ACTGRP(*NEW)                 
0005.00 F*                                                                 
0006.00 F***************************************************************** 
0007.00 D SURYO           S              5S 0 INZ(5)                       
0008.00 D FLD5            S              5A                                
0009.00 C                   MOVE      SURYO         FLD5                   
0010.00 C                   DOW       %SUBST(FLD5:1:1) = '0'               
0011.00 C                   EVAL      FLD5 = %SUBST(FLD5:2:4)              
0012.00 C                   ENDDO                                          
0013.00 C     ' 数量 ='     CAT(P)    FLD5:0        DSP40            40    
0014.00 C     DSP40         DSPLY                   ANS               1    
0015.00 C                   RETURN                                         
0016.00 C                   SETON                                        LR
【解説】
C                   DOW       %SUBST(FLD5:1:1) = '0' 
C                   EVAL      FLD5 = %SUBST(FLD5:2:4)
C                   ENDDO                            
		

の部分が先行ゼロを消去している部分である。
この演算の結果、始めは '00005' であった FLD5 の値は '5' と書き換えられる。

【実行結果】

TESTLINS