数字の値を文字に変換するときはMOVE命令で文字フィールドに
コピーすることが良く知られているが%CHARや%DECを使うと
作業フィールドにMOVEする必要がない。
■ 効果的な組込み関数 %SIZE の使い方の TESTCHAR
ソースはこちらから
0001.00 H DFTNAME(TESTCHR) DATEDIT(*YMD/) BNDDIR('QC2LE')
0002.00 F********** %CHAR と %DEC の組込み関数テスト **************************
0003.00 F*
0004.00 F**********************************************************************
0005.00
0006.00 * CRTBNDRPG PGM(OBJLIB/TESTCHR) SRCFILE(SRCLIB/QRPGLESRC) DFTACTGRP(*NO)
0007.00 * ACTGRP(*NEW) DBGVIEW(*SOURCE) AUT(*ALL)
0008.00
0009.00 D STRING S 80A
0010.00 D N S 4S 0
0011.00 D VALUE S 10A
0012.00 D DEC70 S 7S 0 INZ(0)
0013.00
0014.00 C EVAL STRING = ' これは ' + %CHAR(N) +
0015.00 C ' 番目のレコードです '
0016.00 C EVAL VALUE = '4 165,000 '
0017.00 C EVAL DEC70 = %DEC(VALUE:7:0)
0018.00 /FREE
0019.00 STRING = ' これは ' + %CHAR(N) + ' 番目のレコードです ';
0020.00 VALUE = '4 165,000 ';
0021.00 DEC70 = %DEC(VALUE:7:0);
0022.00 /END-FREE
0023.00 C SETON LR
0024.00 C RETURN
[解説]
数字を文字に変換する%CHARの使い方はそのままで簡単であるが
文字を数字に変換する%DECは %DEC(元の文字変数: 数字の長さ: 小数部の長さ)というように
数字フィールドの定義の長さを示して変換する必要がある。
いずれにせよこの二つの関数を見れば文字や数字の変換であることが
一目瞭然である。MOVEで変数をコピーしているのではそれが直ちに文字や数字を変換するために
MOVEしているとは理解できない。
組込み関数を使用することは演算の無駄を省くだけでなく見ればわかるわかりやすさを
表現するという点で大きな利点がある。
