自己学習メモインデックス
概要
今までCLのHello WorldしかCL開発をしていないので、自分が今後何らかの開発を行うときに、参考となりそうなCLプログラムサンプルを少しずつため込んでいこうと思いQiita記事にまとめます。
関連記事
- IBM i (旧AS400)の自己学習メモ06 CLプログラム(Control Language) Part1
- IBM i (旧AS400)の自己学習メモ06 CLプログラム(Control Language) Part2 RTVCLSRCでCLプログラムからソースを取得
- IBM i (旧AS400)の自己学習メモ07 SEU(Source Entry Utility)チートシート
CLサンプルプログラム
システム日付(SYSVAL QDATE)
システム日付は、RTVSYSVAL
を利用してQDATE
から取得する。
DCLで定義しているLENが6以外で指定するとコンパイル時にエラーとなった。
PGM
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 0
*************** Beginning of data ******************************************************************
0001.00 PGM
0002.00 DCL VAR(&SYSDATE) TYPE(*CHAR) LEN(6)
0003.00 START:
0004.00 RTVSYSVAL SYSVAL(QDATE) RTNVAR(&SYSDATE)
0005.00 SNDPGMMSG MSG('The system date is : ' *CAT &SYSDATE)
0006.00 RETURN
0007.00 END:
0008.00 ENDPGM
****************** End of data *********************************************************************
出力結果
The system date is : 200407
YYYYMMDD形式のシステム日付(SYSVAL QDATE)
QDATEをそのまま出力するとYYMMDDの6桁となってしまう。
YYYYMMDD形式の8桁のシステム日付を取得したい場合、少し加工する必要がある。
PGM
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 0
*************** Beginning of data ******************************************************************
0001.00 PGM
0002.00 DCL VAR(&SYSDATE) TYPE(*CHAR) LEN(6)
0003.00 DCL VAR(&YYYYMMDD) TYPE(*CHAR) LEN(8)
0004.00 START:
0005.00 RTVSYSVAL SYSVAL(QDATE) RTNVAR(&SYSDATE)
0006.00 CVTDAT DATE(&SYSDATE) TOVAR(&YYYYMMDD) +
0007.00 FROMFMT(*SYSVAL) TOFMT(*YYMD) TOSEP(*NONE)
0008.00 SNDPGMMSG MSG('YYYYMMDD : ' *CAT &YYYYMMDD)
0009.00 END:
0010.00 ENDPGM
****************** End of data *********************************************************************
出力結果
The system date is : 2020407
コマンドの実行結果をスプールに出力
PGM
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 0
*************** Beginning of data ******************************************************************
0001.00 PGM
0002.00 START:
0003.00 DSPLIB LIB(YAMAGUCHI1) OUTPUT(*PRINT)
0004.00 SNDPGMMSG MSG('The DSPLIB YAMAGUCHI1 Program is +
0005.00 complete!')
0006.00 RETURN
0007.00 END:
0008.00 ENDPGM
****************** End of data *********************************************************************
出力結果(コンソール)
The DSPLIB YAMAGUCHI1 Program is complete!
出力結果(スプール)
*...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....0....+....1....+....2....+....3
5770SS1 V7R4M0 190621 Display Library 20-04-06 21:38:54 Page 1
Library . . . . . . . . . . . . . . . . : YAMAGUCHI1
Type . . . . . . . . . . . . . . . . . : PROD
Number of objects . . . . . . . . . . . : 15
Library ASP number . . . . . . . . . . : 1
Library ASP device . . . . . . . . . . : *SYSBAS
Library ASP group . . . . . . . . . . : *SYSBAS
Create authority . . . . . . . . . . . : *EXCLUDE
Text description . . . . . . . . . . . : YAMAGUCHI (*CURLIB your current library)
Object Type Attribute Size Description
CLPGM00 *PGM CLLE 106496 Hello World!
CLPGM01 *PGM CLLE 106496 sample cl program01 sysval qdate
CLPGM02 *PGM CLLE 94208 sample cl program02 output *print
CLPGM03 *PGM CLLE 94208 sample cl program03
CLPGM04 *PGM CLLE 94208 sample cl program03
CLPGM06 *PGM CLLE 94208 sample cl program06 decimal calc
CLPGM07 *PGM CLLE 94208 sample cl program07 decimal calc
CLPGM08 *PGM CLLE 94208 Sample CL Program qdate yyyymmdd
MTOKISKP *FILE PF 73728
*...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....0....+....1....+....2....+....3
QCBLLESRC *FILE PF 16384 COBOL source files
QCLSRC *FILE PF 180224 CL source files
QCMDSRC *FILE PF 16384 COMMAND source files
QCPPSRC *FILE PF 16384 C++ Source files
QDDSSRC *FILE PF 32768 DDS source files
QRPGLESRC *FILE PF 16384 RPG sourc files
Total size : 1261568
* * * * * E N D O F L I S T I N G * * * * *
** WWW.PUB400.COM **
CAT 3兄弟 文字列結合
コマンド | 概要 |
---|---|
*CAT | 文字列結合をする。 CHAR(10)の変数に'12345'という5桁の文字列がセットされている場合、5桁の空白文字列も含んで結合される。 |
*TCAT | 文字列結合の際、左辺の文字列に含まれる後続ブランクをトリムし、右辺の文字列と結合する。 |
*BCAT | 文字列結合の際、左辺の文字列に含まれる後続ブランクをトリムし、1文字空白が入り、右辺の文字列と結合する。 |
PGM[*CAT]
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 0
*************** Beginning of data *******************************************************************
0001.00 PGM
0002.00 DCL VAR(&NAME) TYPE(*CHAR) LEN(40)
0003.00 START:
0004.00 CHGVAR VAR(&NAME) VALUE('Yu Yamaguchi')
0005.00 SNDPGMMSG MSG('Hello ' *CAT &NAME *CAT '!')
0006.00 RETURN
0007.00 END:
0008.00 ENDPGM
****************** End of data **********************************************************************
出力結果[*CAT]
Hello Yu Yamaguchi !
PGM[*TCAT]
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 0
*************** Beginning of data *****************************************************************************
0001.00 PGM 200405
0002.00 DCL VAR(&NAME) TYPE(*CHAR) LEN(40) 200405
0003.00 START: 200405
0004.00 CHGVAR VAR(&NAME) VALUE('Yu Yamaguchi') 200405
0005.00 SNDPGMMSG MSG('Hello ' *CAT &NAME *TCAT '!') 200405
0006.00 RETURN 200405
0007.00 END: 200405
0008.00 ENDPGM 200405
****************** End of data ********************************************************************************
出力結果[*TCAT]
Hello Yu Yamaguchi!
PGM[*BCAT]
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+... 0
*************** Beginning of data ******************************************************************
0001.00 PGM
0002.00 DCL VAR(&NAME) TYPE(*CHAR) LEN(40)
0003.00 START:
0004.00 CHGVAR VAR(&NAME) VALUE('Yu Yamaguchi')
0005.00 SNDPGMMSG MSG('Hello ' *CAT &NAME *BCAT '!')
0006.00 RETURN
0007.00 END:
0008.00 ENDPGM
****************** End of data *********************************************************************
出力結果[*BCAT]
Hello Yu Yamaguchi !