IBM i (旧AS400）の自己学習メモ　番外編０１　PUB400.comで日本語対応

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

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

# 概要

AS400関連の自己学習を進めていく上で、大変お世話になっているPUB400.comですが、今まで日本語の入力ができずにいました。
ソースコードを新規作成する際に指定する`Text 'description'`に日本語を入力しようとするとエラー音が鳴り`Field data must be alphanumeric.`というエラーメッセージが表示されてしまったり、
SEUの画面でコメント /*  */ の入力などでソースコードのコメントを日本語で入力しようとすると同じくエラー音が鳴り`Field data must be alphanumeric.`とエラーメッセージが表示されたりします。

このエラーを解消する方法についてまとめました。

# `Text 'description'`に日本語文字列を入力しようとすると Field data must be alphanumeric. と怒られる

例えば、STRSEUで物理ファイルを新規作成しようとする際、description欄に日本語でコメントを入れようとすると、エラーとなります。

<img width="1088" alt="スクリーンショット 2020-03-22 18.56.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/58a2df30-f2ab-3320-4c7a-6116b90af417.png">
<img width="1088" alt="スクリーンショット 2020-03-22 18.53.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/b012f75a-5e21-3217-4b3c-d1d7468418eb.png">

これは、PUB400.comで払い出してもらったアカウントの言語設定やそれに紐づくCCSIDの設定が、
日本語に対応したものではないためだと思われます。
`DSPUSRPRF`コマンドで自分の設定情報を確認すると、`Language identifier`が`ENU`となっています。

<img width="1088" alt="スクリーンショット 2020-03-22 19.23.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/5e9654d8-347d-1b54-4960-7a1792ba88d0.png">

これは、以下のサイトを参考にすると、ENU=アメリカの設定で、CCSIDは`39`となっていることを表しているようです。
https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_72/com.ibm.ondemand.installi.doc/dodinl08.htm

本来であれば、`CHGUSRPRF`コマンドを実行して変更したいところですが、そのコマンドの実行を完了させるために必要な権限が割り当てられていないため、実行できませんでした。

そこで、PUB400.comにログインした後、以下のコマンドを実行することで、ログインセッションの間だけ、JOBのCCSIDを1399に変更することができます。

```
CHGJOB CCSID(1399)
```

<img width="1088" alt="スクリーンショット 2020-03-22 19.29.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/2833b422-1079-0518-5af1-f7afc3963fea.png">

コマンド実行後、物理ファイルの作成画面でdescriptionに日本語を入力してみると、正常に入力できます。

<img width="1088" alt="スクリーンショット 2020-03-22 19.29.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/54261a4b-ecec-1365-9256-295e787afcff.png">

# SEUのプログラミングする画面で日本語入力するとエラーとなる事象の解消方法

CHBJOBを利用してCCSIDを1399にするだけでは、実はソースコード内のコメントや、DSPF（画面ファイル）のラベルフィールドなどに日本語を入力することはできません。
自己学習では、ファイル定義やCLプログラムを格納するファイルは、それぞれQDDSSRCやQCLSRCなどに分けて開発しています。
これらのファイルはすでにPUB400.comでアカウント作成してもらうと、存在するファイルですが、これらのファイルにソースコード（メンバー）を作成している限り、日本語入力はできません。

日本語をソースコード内に入れたい場合は、これらのファイルから新規で作り、いくつかのオプションを変更して指定する必要があります。

まず新規でファイルを作成します。
ここでは、画面ファイル（DSPF）を格納するQDSPSRCというファイルを新規で作成します。

以下のコマンドを実行

```shell
crtsrcpf
```

Create Source Physical File (CRTSRCPF) の画面が表示されるので`F10`キーを押下
以下のように各パラメーターを指定してEnter

ポイントとしては

- User specified DBCS dataの指定を`*YES`に変更する
- Coded character set IDを`1399`に変更する

```shell
                    Create Source Physical File (CRTSRCPF)                   
                                                                             
Type choices, press Enter.                                                   
                                                                             
File . . . . . . . . . . . . . . FILE         > QDSPSRC                      
  Library  . . . . . . . . . . .              >   YAMAGUCHI1                 
Record length  . . . . . . . . . RCDLEN         92                           
Member, if desired . . . . . . . MBR            *NONE                        
User specified DBCS data . . . . IGCDTA         *YES   ←コレをYESに変更                         
Text 'description' . . . . . . . TEXT         > '画面ソース（DSPF）'     
                                                                             
                                                                             
                           Additional Parameters                             
                                                                             
System . . . . . . . . . . . . . SYSTEM         *LCL                         
Expiration date for member . . . EXPDATE        *NONE                        
Maximum members  . . . . . . . . MAXMBRS        *NOMAX                       
Access path size . . . . . . . . ACCPTHSIZ      *MAX1TB                      
Access path logical page size  . PAGESIZE       *KEYLEN                      
Access path type . . . . . . . . ACCPTH         *ARRIVAL                     
Access path maintenance  . . . . MAINT          *IMMED             
Access path recovery . . . . . . RECOVER        *NO                
Force keyed access path  . . . . FRCACCPTH      *NO                
Member size:                     SIZE                              
  Initial number of records  . .                10000              
  Increment number of records  .                1000               
  Maximum increments . . . . . .                499                
Allocate storage . . . . . . . . ALLOCATE       *NO                
Contiguous storage . . . . . . . CONTIG         *NO                
Preferred storage unit . . . . . UNIT           *ANY               
Records to force a write . . . . FRCRATIO       *NONE              
Maximum file wait time . . . . . WAITFILE       *IMMED             
Maximum record wait time . . . . WAITRCD        60                 
Share open data path . . . . . . SHARE          *NO                
Max % deleted records allowed  . DLTPCT         *NONE              
Coded character set ID . . . . . CCSID          1399    ←　コレを１３９９に変更  
Allow update operation . . . . . ALWUPD         *YES       
Allow delete operation . . . . . ALWDLT         *YES       
Authority  . . . . . . . . . . . AUT            *LIBCRTAUT     
```

試しに新規でソースコードを作成して、その中に日本語のコメントを入力してみました。
以下のように、正常に日本語入力が可能となっています。

<img width="1088" alt="スクリーンショット 2020-04-14 7.30.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246556/f2fadd14-4324-cdca-f1ce-66e0ffae2f71.png">

# 補足

QCLSRCなどすでに存在するファイルですが、DBCSの設定を変更することができないようで、削除して作り直すしか無いと思われます。
ソースコード内に日本語入力を行いたい場合は、一度ファイルを削除して作り直すか、ソースコードを格納するファイルを別途用意（新規作成）するかしないとダメそうです。