この記事の概要
- RPG4をはじめたいけど、どこから手を付けたら良いか分からない人
- このシリーズを読むことで、RPG4、その先のRPGLEの始め方がわかる
- 知識0から実践して覚えた内容をアウトプット
いつものように知識0から独学で学習した結果をアウトプットしていきます。
現在はRPGLEのフリーフォーマットで、サービスプログラム、プロシージャ、バインドディレクトリなんかを駆使してコーディングしています。
RPG3の頃とは随分書き方も効率も変わりました。
RPG4のメリット
C仕様書がフリーフォーマットで書けます。
分岐内の処理や、ループ内の処理にインデント(字下げ)をすることが出来るため、処理の構造がわかりやすいです。
また、多言語に慣れているプログラマーが入りやすいため、学習コストがRPG3よりも低いと言われています。
標識とサヨナラ
標識に頼らないコーディングが出来ます。
かつては標識はRPGの特徴でもありましたが、RPG4では推奨されていません。
(サポートはしています)
標識ではなく、%FOUNDや、%EOFなど専用の物が用意されました。
変数名が柔軟につけられる
従来の6文字制限(厳しい!)から、14桁まで可能になりました。
よりその変数の用途がわかる名前をつけやすくなりましたね。
間違ってもA01とか何を表しているか分からない名前は止めましょう。
アンダーバーも使用可能なので、英小文字が使えない環境の場合は
WRITE_DATEなどアンダーバーで区切ると良いかもしれないです。
便利な関数が増加
RPG4で便利な関数がたくさん追加されました。
フリーフォーマットでしか使えないものもあります。
日付計算や文字列の加工は特にやり易くなりましたね。
紹介すると長くなるので、また別記事で記載します。
一番の利点
とはいえ一番の利点は、プロシージャが使えること、プロシージャをサービスプログラムとしてまとめることが出来ること。RPGLE化にあると思います。
汎用処理やよく使用するロジックはプログラムのそとに出して、それを簡単に再利用出来ること。
またサブプロシージャを活用することで、ローカル変数が使えること。
非常に大きなメリットがあります。
この部分は初めは少しややこしいため、別記事で丁寧に記載したいと思います。
今回の内容
今回はC仕様書をフリーフォーマットで書く方法。
一番基礎となるコンパイル、標識を省いたCHAINの使用例を紹介します。
C仕様書をフリーで書く方法

フリーで記述出来る範囲です。
/の位置は7桁目(SEUの右下の列表示でいうと10桁目)になります。

こんなイメージですね。
HI標識に標識番号を指定して、
指定したキーのレコードがあればHI標識が*OFF
なければHI標識が*ONになるものですね。

%FOUND(ファイル名)と指定してもいいですし、
上記のように省略しても構いません。

代入処理はこれまでのZ-ADD、MOVEではなく
EVALという新たな命令が追加されました。
EVAL WK1 = 'TEST_DATA';
EVAL WK2 = 12345;
数値でも文字型でもEVALで代入可能です。
またEVALは省略可能のため、実際に使用する際には
WK1 = 'TEST_DATA';
WK2 = 12345;
このような形でEVALは書かない方がより分かりやすいですね。
下記は簡単なサンプルのコードです。
TESTFILEをEOFになるまでループして、帳票に1行3項目ずつ出力しています。
構造が一目でわかりますね。
/FREE
READ REC; // TESTFILEを読み込み(レコード様式指定)
DOW (NOT %EOF); // EOFになるまでループ(前判定)
PRT_CODE = CODE; // TESTFILEの項目を印刷項目に代入
PRT_NAME = NAME;
PRT_DATE = DATE;
WRITE PRINTREC; // 印刷のレコード様式を書き込み
READ REC; // 次のレコードを読み込み
ENDDO;
*INLR = *ON;
RETURN;
/END-FREE
印刷項目への代入をサブプロシージャにしてみます。
/FREE
READ REC;
DOW (NOT %EOF);
WRITE_PRINT();
READ REC;
ENDDO;
/END-FREE
サブプロシージャにする場合は、引数に読取り内容を与えるとなおいいですね。
/FREE
READ REC READ_DATA;
DOW (NOT %EOF);
WRITE_PRINT(READ_DATA);
READ REC;
ENDDO;
/END-FREE

それを%KDSとして指定します。

レコードロックが掛りません。
コンパイルのコマンドはRPG3とRPG4で異なりますが
SEUから行う場合は、14番でコンパイルが可能です。
RPGLEの場合はモジュールの組み込み等も入ってきますが、その辺りもサービスプログラムにまとめて、バインドディレクトリに紐づけてから
H仕様書にバインドディレクトリを指定すれば、コンパイルの時に入力する必要はありません。
その辺りも別記事に記載しようと思います。