%DECに比べて文字に変換する%CHARは簡単でエラーも発生することはない。
[数字を文字に変換するTESTCHR2]
ソースはこちらから
0001.00 H DFTNAME(TESTCHR2) DATEDIT(*YMD/) BNDDIR('QC2LE') 0002.00 D ZONE6 S 6S 3 INZ(6.25) 0003.00 D PACK7 S 7P 2 INZ(7.48) 0004.00 D CHR10 S 10A 0005.00 D DSP40 S 40A 0006.00 0007.00 C EVAL CHR10 = %CHAR(ZONE6) 0008.00 C 'ZONE6=' CAT(P) CHR10 DSP40 0009.00 C DSP40 DSPLY ANS 1 0010.00 C EVAL CHR10 = %CHAR(PACK7) 0011.00 C 'PCCK7=' CAT(P) CHR10 DSP40 0012.00 C DSP40 DSPLY ANS 1 0013.00 C SETON LR 0014.00 C RETURN
[解説]
ZONE10進数からでもバック数からでも%CHAR で文字列に変換することができる。
実行してみると
プログラム・メッセージの表示 DSPLY ZONE6=6.250 *N DSPLY PCCK7=7.48 応答を入力して,実行キーを押してください 応答 . . . F3= 終了 F12= 取消し
のように表示される。
%DEC は使用頻度があるのは理解できる人も多いと思うが %CHAR はどのような
目的で使用されるのだろうか?
それは文字列の結合などを目的とする場合である。
[文字列の結合を行う%CHARの使用: TESTCHR3 ]
ソースはこちらから
0001.00 H DFTNAME(TESTCHR3) DATEDIT(*YMD/) BNDDIR('QC2LE') 0002.00 D ZONE6 S 6S 3 INZ(6.25) 0003.00 D PACK7 S 7P 2 INZ(7.48) 0004.00 D CHR10 S 10A 0005.00 D DSP40 S 40A 0006.00 0007.00 D INFDS_THIS SDS 0008.00 D RUN_DATE 276 281S 0 0009.00 0010.00 /FREE 0011.00 DSP40 = ' 今日は 20' + %SUBST(%CHAR(UDATE):1:2) + ' 年 ' + 0012.00 %SUBST(%CHAR(UDATE):3:2) + ' 月 ' + 0013.00 %SUBST(%CHAR(UDATE):5:2) + ' 日です。 '; 0014.00 /END-FREE 0015.00 C DSP40 DSPLY ANS 1 0016.00 C SETON LR 0017.00 C RETURN
[解説]
UDATE (6桁の数字)を%CHARで文字列に変換して年月日を取り出して表示している。
数字は +結合できないので%CHARで文字列に変換する必要がある。
プログラム・メッセージの表示 DSPLY 今日は 2021 年 01 月 08 日です。 応答を入力して,実行キーを押してください 応答 . . . F3= 終了 F12= 取消し
ご参考までに UDATE というのは今日の日付ではなく正しくはこのジョブの開始日付のことである。
もしこのジョブがサインオフされることなく2日間続けばUDATEは最初に開始された日付のままで
変わることはない。
正しい今日の日付は
0007.00 D INFDS_THIS SDS 0008.00 D RUN_DATE 276 281S 0
で示されている RUN_DATE である。