IBM i (旧AS400）の自己学習メモ０６　CLプログラム（Control Language） Part3

# 自己学習メモインデックス

[IBM i (旧AS400）の自己学習メモ　インデックス](https://qiita.com/You_name_is_YU/items/3964849e7803c8eaf767)

# 概要

今までCLのHello WorldしかCL開発をしていないので、自分が今後何らかの開発を行うときに、参考となりそうなCLプログラムサンプルを少しずつため込んでいこうと思いQiita記事にまとめます。

## 関連記事

- [IBM i (旧AS400）の自己学習メモ０６　CLプログラム（Control Language） Part1](https://qiita.com/You_name_is_YU/items/774b320ffd48fbff5f60)
- [IBM i (旧AS400）の自己学習メモ０６　CLプログラム（Control Language） Part2　RTVCLSRCでCLプログラムからソースを取得](https://qiita.com/You_name_is_YU/items/c467a8476c3c7d63e08d)
- [IBM i (旧AS400）の自己学習メモ０７　SEU(Source Entry Utility)チートシート](https://qiita.com/You_name_is_YU/items/2ebc3eb32827c5e4c5d0)

# CLサンプルプログラム

## システム日付(SYSVAL QDATE)

システム日付は、`RTVSYSVAL`を利用して`QDATE`から取得する。
DCLで定義しているLENが6以外で指定するとコンパイル時にエラーとなった。

```shell: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 *********************************************************************
```

```shell-session:出力結果
 The system date is : 200407
```

## YYYYMMDD形式のシステム日付(SYSVAL QDATE)

QDATEをそのまま出力するとYYMMDDの６桁となってしまう。
YYYYMMDD形式の８桁のシステム日付を取得したい場合、少し加工する必要がある。

```shell: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 *********************************************************************
```

```shell-session:出力結果
 The system date is : 2020407 
```

## コマンドの実行結果をスプールに出力

```shell: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 *********************************************************************
```

```shell-session:出力結果(コンソール)
The DSPLIB YAMAGUCHI1 Program is complete!
```

```shell-session:出力結果(スプール)
 *...+....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 **                                                           
```

![AS400-11.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/d8e5c27a-c6a5-00be-ccc6-1578d6b854cf.gif)

## CAT ３兄弟 文字列結合

|コマンド|概要|
|:--|:--|
|*CAT|文字列結合をする。<br>CHAR(10)の変数に'12345'という５桁の文字列がセットされている場合、５桁の空白文字列も含んで結合される。|
|*TCAT|文字列結合の際、左辺の文字列に含まれる後続ブランクをトリムし、右辺の文字列と結合する。|
|*BCAT|文字列結合の際、左辺の文字列に含まれる後続ブランクをトリムし、１文字空白が入り、右辺の文字列と結合する。|

```shell: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 **********************************************************************
```

```shell-session:出力結果[*CAT]
Hello Yu Yamaguchi                            !
```

```shell: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 ********************************************************************************
```

```shell-session:出力結果[*TCAT]
Hello Yu Yamaguchi!
```

```shell: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 *********************************************************************
```

```shell-session:出力結果[*BCAT]
Hello Yu Yamaguchi !
```