とあるSEの色々ブログ

プログラミングで全ての人を幸せに。プログラミングとITと転職と雑記と備忘録

AS400

【RPG4】フリーフォーマット

投稿日:

この記事の概要

  • RPG4をはじめたいけど、どこから手を付けたら良いか分からない人
  • このシリーズを読むことで、RPG4、その先のRPGLEの始め方がわかる
  • 知識0から実践して覚えた内容をアウトプット

いつものように知識0から独学で学習した結果をアウトプットしていきます。
現在はRPGLEのフリーフォーマットで、サービスプログラム、プロシージャ、バインドディレクトリなんかを駆使してコーディングしています。
RPG3の頃とは随分書き方も効率も変わりました。

RPG4のメリット

C仕様書がフリーフォーマットで書けます。

分岐内の処理や、ループ内の処理にインデント(字下げ)をすることが出来るため、処理の構造がわかりやすいです。
また、多言語に慣れているプログラマーが入りやすいため、学習コストがRPG3よりも低いと言われています。

標識とサヨナラ

標識に頼らないコーディングが出来ます。
かつては標識はRPGの特徴でもありましたが、RPG4では推奨されていません。
(サポートはしています)
標識ではなく、%FOUNDや、%EOFなど専用の物が用意されました。

変数名が柔軟につけられる

従来の6文字制限(厳しい!)から、14桁まで可能になりました。
よりその変数の用途がわかる名前をつけやすくなりましたね。
間違ってもA01とか何を表しているか分からない名前は止めましょう。
アンダーバーも使用可能なので、英小文字が使えない環境の場合は
WRITE_DATEなどアンダーバーで区切ると良いかもしれないです。

便利な関数が増加

RPG4で便利な関数がたくさん追加されました。
フリーフォーマットでしか使えないものもあります。
日付計算や文字列の加工は特にやり易くなりましたね。
紹介すると長くなるので、また別記事で記載します。

一番の利点

とはいえ一番の利点は、プロシージャが使えること、プロシージャをサービスプログラムとしてまとめることが出来ること。RPGLE化にあると思います。
汎用処理やよく使用するロジックはプログラムのそとに出して、それを簡単に再利用出来ること。
またサブプロシージャを活用することで、ローカル変数が使えること。
非常に大きなメリットがあります。
この部分は初めは少しややこしいため、別記事で丁寧に記載したいと思います。

今回の内容

今回はC仕様書をフリーフォーマットで書く方法。
一番基礎となるコンパイル、標識を省いたCHAINの使用例を紹介します。

C仕様書をフリーで書く方法

/FREE ~ /END-FREEまでの間が
フリーで記述出来る範囲です。
/の位置は7桁目(SEUの右下の列表示でいうと10桁目)になります。
RPG3でファイルをCHAINする場合は
こんなイメージですね。
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
複数項目でCHAINする場合は、KLISTではなくDSを作って
それを%KDSとして指定します。
CHAIN(N)指定をすると更新対象としてファイルを宣言していても
レコードロックが掛りません。

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

-AS400

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

ACSのインストール方法

ASのエミュレーターACSのインストール方法を紹介します。プリンターの印刷は安定しないとか悪い評判を昔はよく聞きましたが現在はどうなんでしょう?プリンター出力はまだ試していないのでわかりませんが開発環 …

Hello AS/400

転職をきっかけにAS/400と出会いましたIBMって? ASって? 汎用機って?そんな状態から始まりました。出会いは突然で、そしてだいぶ意味不明。Z-ADDとか、CHAINとか、聞いたこともない命令群 …

デバッグの勧め STRISDB

RPG3のデバッグが出来る「STRISDB」の操作方法を記載します。自分への備忘録&迷えるAS/400ビギナーの方の参考になれば幸いです。 対象:自分、AS/400ビギナーの方、もしくはSTRISDB …

RPG4のススメ

色んなベンダーさんからお話を伺うと、AS/400を使用している企業ではRPG3がまだ一番多いようです。RPG3の固定形式でのコーディングは、オープン系の開発に慣れている若い方にはなかなか馴染みづらい、 …

WINDOWの作り方

ユーザーエントリーのプログラムを作る際に入力画面を保持した上で、顧客マスタや製品マスタなどをポップアップウィンドウという形で表示して、選択された値を入力画面に戻すみたいな。ユーザーは入力する際にコード …