17.7.RPGの基本(HとF) |
本日は、臨時講師として、厳しいことで有名な、石田源次先生を迎えて、RPGの基礎をご教授願います。 「今日は、機械実習で、3人か。わからんところがあれば、手を挙げるように。いいな!」 生徒「はい」 「今、RPGには、どんだけ種類があるか知っているか?えー、岩田君」 岩田「えーっと、System36のRPGIIと、System38のRPGIIIと、AS/400のRPG400です。それと、RPGILEがあります。」 「ふむ、正しいのだが、もうSystem36とSystem38はとっくに、マシンの製造は中止しておる。したがって、AS/400上に、あるものというとどうじゃ?うん、あー澤田君」 澤田「はい、38環境と36環境用に、各々RPG38とRPG36があって、ネイティブ(本来のAS/400)用に、PRG400とRPG ILE400です。」 「うん、そうだな。むかし、RPGIIIといわれたものは、いまAS/400では、RPG38と呼んでいる。もう、凍結されて久しい。機能拡張はもうない。また、RPG400も、拡張はないようだ。」 「それでは、RPGの仕様書とはなんじゃ?えー、鈴木君?」 鈴木「えーっとぉ、仕様書は、プログラム内部の機能を、おおさっぱにまとめた区分みたいなものです。」 「うーん、まいいだろう、 では、仕様書の種類と順番を言ってもらおうか。岩田君」 岩田「HFELICO」です。 「よし、これから、RPGプログラムを勉強する。プログラムの作成とは、以下のことをすることだ。
今から勉強するのは、「ソースファイルにプログラムソースを登録する」部分だ。それから、プログラムをコンパイルする前に、そのコンパイラが参照するオブジェクトは、予め存在していなければ、コンパイルでエラーとなる。まあ、これは、次のステップなので、その時説明しよう。」 「では講義に入ろう。今日は、H仕様書とF仕様書だ。」 H仕様書(制御仕様書)「これは、プログラムの見出しなのだが、省略してもかまわない。その代わり、共通のデータエリアに入っている内容がコンパイラによって、参照されるのだ。そのデータエリアの名前は、RPGHSPECやDFTHSPECだ。この80バイトのデータエリアに、H仕様書の中身をセットしておくのだ。すると、コンパイラが、かってに中身を取り出す。優先順位としては、まず、RPGHSPECを探し、その後、DFTHSPECを探す。」 「すみません、でーたえりあ、って何ですか?」 「うむ。オブジェクト*DTAARAのことで、ディスク上にデータを書き留めることができるので便利なのだが、*FILEのファイルとは別物だ。コマンドはCRTDTAARAで作成、CHGDTAARAで中身の変更−これで、データをセットできる−、DLTDTAARAで削除だ。ファイルと違って、レコードやらメンバーという概念はない。まあ、そのうち分かる。そうだ、特殊なデータエリアとして、「ローカルデータエリア」=*LDA(RPGで使う)があることを覚えておいてくれ。」 「この制御仕様書は、日付の形式(年月日か月日年か日月年)とか、小数点がドットかカンマなのか(国によって違う)という、程度のものでロジックに大きくは関与しない。但し、日付形式はYMD(Year Month Day年月日)形式がいいだろう。後で出てくるが、C仕様書の予約語、UDATEなどの日付の形式はここで決まる。」 「あのー、よやくご、っていうのは何でしょう?」 「君らは、今言語を勉強しておるな。これは、誰のための言語だ?ん?プログラマーか?実は違う。コンパイラーのための言語なんだよ。つまり、プログラム言語とは、このコンパイラーへの指示書と同じなんだ。その中で、特に、予め目的を持った特殊なキーワードがある。それが、予約語だ。特殊値ともいう。つまり、便利な機能を持った単語を予め、準備してあるんだ。日付がほしければ、UDATEとか*DATEとか、年だけほしければ、UYEARなどと決まっている。言い方を変えれば、このコンパイラを作った人たちが、プログラムを作る人たちに便利なようにと、特別な単語に、特別な動きを、封じ込めたのだな。これは、その都度暗記するしかない。」
「という感じで定義する。Y/は、YMD形式の日付で、編集コードY(O仕様書で出てくる)のセパレータは/だという指定だ。」 漢字のデータを、処理する場合の注意がある。こちらを参照してくれ。 F仕様書(ファイル仕様書)「さて、いよいよ、プログラムらしい仕様書が出てきたぞ。このF仕様書の話しの前に、AS/400のファイルについて話しておく。」 「AS/400のファイルは、いろいろある。よく使うものだけ、言うぞ。物理ファイル、論理ファイル、画面装置ファイル、印刷装置ファイルだ。画面装置ファイルは、画面ファイルとよく言っている。また、印刷装置ファイルは、プリンターファイルとよく言う。物理・論理ファイルはデータを持つファイルで、画面・プリンターファイルは、装置ファイルといって、装置にデータを送るためのファイルだ。ここは、基本中の基本だからな。これによって、F仕様書の記述が違うのだ。
「では、鈴木君、(1)と(2)を、日本語で説明してくれ。」 鈴木「えーと、(1)はZZJOBML1を入力専用、全手順、外部記述、キー付きでオープンするファイル、多分、L1とLなので論理ファイルでしょう。(2)は、物理ファイルか論理ファイルか不明ですが、XXXXXというファイルを、更新、全手順、内部記述、レコード長102バイトで、キーなし、でオープンします。」 「よし、完璧だ。では、澤田君、(3)と(4)を説明してくれ。」 澤田「はい。(3)は、ZZI020Dというファイルを、全手順で、画面ファイルとしてオープンしています。(4)はQPRT198というファイルを、出力専用、内部記述、レコード長198バイト、印刷装置ファイルとしてオープンしています。」 「そのとうり。画面ファイルのF仕様書の定義は、このまま丸暗記したほうがいいCF,E,WORKSTNだ。これ以外のパターンは、よっぽど特殊な場合を除いては、無いのだ。むしろ、この行の下に、色色付くことがあるのだが、それは、別の機会にする。」 「ところで、画面ファイルか、印刷装置ファイルかは、実は、WORKSTNとかPRINTERで決まるわけではないんだ。OS400がそのオブジェクトを参照して、其の記述が画面ならば画面ファイル、印刷装置ファイルなら印刷装置ファイルとなるなだが、まあ、今は、さほど重要ではない。頭の片隅に置いておいてくれ。あくまで、記述方法は上記のように、 と暗記してくれ。それから、この暗号のような、IFとかUFなどの桁位置は、しっかり場所が決まっている。適当な場所ではない。このあたりは、SEUが手助けしてくれる。SEUの話しは別の機会にする予定だ。※SEUとは、ソースエディターのことです。それから、ここ以降、O仕様書以外は、プログラム内部記述は一切触れないことにする。外部記述だけにする。内部記述は、絶対にその方式でなければ不可能という場合にだけ使うもので、通常は外部記述が大原則だからだ。」 「ここで、ファイル記述のその他の形式を出す。RPG400使用者の手引きからの引用だ。」 「上記の、サンプル内の、IFのFは全手順を意味する。岩田君、何の略かな?」 岩田「Full Procedureです。」 「正解。では、このFをPにするとどうなるんだったかな?たとえば、
この場合は、どうなるかな?岩田君」 岩田「えー、プライマリーファイルとなって、プログラム全体がRPGサイクル処理になります。」 「そうだな。このRPGサイクル処理はとても、便利なので勉強しておいたほうがいいが、F仕様書では、指定方法まででおわりだ。」 「余談だが、RPGがOS400上でファイルオープンすると、OS400はプログラムのために、いろいろとお膳立てしてくれる。ファイルーオープン用の様々な準備をしてくれる。その中の一部の情報をODP(Open Data Path)といって、実行中に参照されている、OS400上のファイルの情報を持っている。これを、RPGで取り出すことができる。ファイルのレコード件数や、メンバー名、相対レコード番号、ほかに、装置ファイルならば、その装置情報も取り出せる。これを、RPGでは、ファイル情報データ構造として取り出す。後々、役立つかもしれないので、マニュアルで見ておいてくれ。「RPG/400 解説書の2.3.1 ファイル情報データ構造」に出ている。また、この機能はODPの一部なので、RPGに限定された情報源ではない。もっと詳しくは、「データ管理機能の手引き」にさらに細かく出ている。ただ、このあたりは中級のテクニックになるだろうから、今すぐに必要ではないだろう。」 「念のために、サンプルを掲げる。」
「ここでは、このプログラムを実行している最中にxxxxxというファイルの属性を取り出している。オープンされたファイル名、ライブラリー名、メンバー名などを取り出している。もちろん、このほかに、レコード件数もだせるぞ。」 「今日はここまで!」 起立、礼、着席 復習コーナー
|
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||