RPG で数字をメッセージ出力するには、一旦、文字フィールドに変換してから
その文字フィールドを出力するようにしなければならない。
DSPLY
命令では 数字フィールドを直接、出力することはできないからだ。
しかし、かと言って CLP には数字フィールドの値を簡単に文字フィールドに
編集できる関数は用意されていない。
CHGVAR
コマンドで数字を文字に変換しただけでは先行ゼロが残ってしまい、
00003 個のオブジェクトが見つかった。
のように、見づらいメッセージになってしまう。
そこでここでは簡単にゼロ・サプレス、つまり先行ゼロを RPG 内で消去する方法を
紹介しよう。
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'
と書き換えられる。