%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 である。
