最初のページに戻ります。

総合の目次があるページに戻ります。

よく使うマニュアルです

Wiki

updated on 2004.06.23

17.7.RPGの基本(HとF)

[ Previous ] [ HOME ] [ Upper ] [ Next ]


本日は、臨時講師として、厳しいことで有名な、石田源次先生を迎えて、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プログラムを勉強する。プログラムの作成とは、以下のことをすることだ。

  1. ソースファイルにプログラムソースを登録する。SEUを使う。
  2. コンパイルをして、オブジェクトプログラムを作成する。

今から勉強するのは、「ソースファイルにプログラムソースを登録する」部分だ。それから、プログラムをコンパイルする前に、そのコンパイラが参照するオブジェクトは、予め存在していなければ、コンパイルでエラーとなる。まあ、これは、次のステップなので、その時説明しよう。」

「では講義に入ろう。今日は、H仕様書とF仕様書だ。」

H仕様書(制御仕様書)

「これは、プログラムの見出しなのだが、省略してもかまわない。その代わり、共通のデータエリアに入っている内容がコンパイラによって、参照されるのだ。そのデータエリアの名前は、RPGHSPECDFTHSPECだ。この80バイトのデータエリアに、H仕様書の中身をセットしておくのだ。すると、コンパイラが、かってに中身を取り出す。優先順位としては、まず、RPGHSPECを探し、その後、DFTHSPECを探す。」

「すみません、でーたえりあ、って何ですか?」

「うむ。オブジェクト*DTAARAのことで、ディスク上にデータを書き留めることができるので便利なのだが、*FILEのファイルとは別物だ。コマンドはCRTDTAARAで作成、CHGDTAARAで中身の変更−これで、データをセットできる−、DLTDTAARAで削除だ。ファイルと違って、レコードやらメンバーという概念はない。まあ、そのうち分かる。そうだ、特殊なデータエリアとして、「ローカルデータエリア」=*LDA(RPGで使う)があることを覚えておいてくれ。」

「この制御仕様書は、日付の形式(年月日か月日年か日月年)とか、小数点がドットかカンマなのか(国によって違う)という、程度のものでロジックに大きくは関与しない。但し、日付形式はYMD(Year Month Day年月日)形式がいいだろう。後で出てくるが、C仕様書の予約語、UDATEなどの日付の形式はここで決まる。」

「あのー、よやくご、っていうのは何でしょう?」

「君らは、今言語を勉強しておるな。これは、誰のための言語だ?ん?プログラマーか?実は違う。コンパイラーのための言語なんだよ。つまり、プログラム言語とは、このコンパイラーへの指示書と同じなんだ。その中で、特に、予め目的を持った特殊なキーワードがある。それが、予約語だ。特殊値ともいう。つまり、便利な機能を持った単語を予め、準備してあるんだ。日付がほしければ、UDATEとか*DATEとか、年だけほしければ、UYEARなどと決まっている。言い方を変えれば、このコンパイラを作った人たちが、プログラムを作る人たちに便利なようにと、特別な単語に、特別な動きを、封じ込めたのだな。これは、その都度暗記するしかない。」

     H            Y/                                                                

「という感じで定義する。Y/は、YMD形式の日付で、編集コードY(O仕様書で出てくる)のセパレータは/だという指定だ。」

漢字のデータを、処理する場合の注意がある。こちらを参照してくれ。

F仕様書(ファイル仕様書)

「さて、いよいよ、プログラムらしい仕様書が出てきたぞ。このF仕様書の話しの前に、AS/400のファイルについて話しておく。」

「AS/400のファイルは、いろいろある。よく使うものだけ、言うぞ。物理ファイル論理ファイル画面装置ファイル印刷装置ファイルだ。画面装置ファイルは、画面ファイルとよく言っている。また、印刷装置ファイルは、プリンターファイルとよく言う。物理・論理ファイルはデータを持つファイルで、画面・プリンターファイルは、装置ファイルといって、装置にデータを送るためのファイルだ。ここは、基本中の基本だからな。これによって、F仕様書の記述が違うのだ。

F仕様書のサンプル
(1)  FZZJOBML1iF  E           K        DISK                                
(2)  FXXXXX   UF  F     102            DISK                                
(3)  FZZI020D CF  E                    WORKSTN                               
(4)  FQPRT198 O   F     198            PRINTER                              

「では、鈴木君、(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にするとどうなるんだったかな?たとえば、

  FXXXXX   iP  E            K         DISK                               

この場合は、どうなるかな?岩田君」

岩田「えー、プライマリーファイルとなって、プログラム全体がRPGサイクル処理になります。」

「そうだな。このRPGサイクル処理はとても、便利なので勉強しておいたほうがいいが、F仕様書では、指定方法まででおわりだ。」

「余談だが、RPGがOS400上でファイルオープンすると、OS400はプログラムのために、いろいろとお膳立てしてくれる。ファイルーオープン用の様々な準備をしてくれる。その中の一部の情報をODP(Open Data Path)といって、実行中に参照されている、OS400上のファイルの情報を持っている。これを、RPGで取り出すことができる。ファイルのレコード件数や、メンバー名、相対レコード番号、ほかに、装置ファイルならば、その装置情報も取り出せる。これを、RPGでは、ファイル情報データ構造として取り出す。後々、役立つかもしれないので、マニュアルで見ておいてくれ。「RPG/400 解説書の2.3.1 ファイル情報データ構造」に出ている。また、この機能はODPの一部なので、RPGに限定された情報源ではない。もっと詳しくは、「データ管理機能の手引き」にさらに細かく出ている。ただ、このあたりは中級のテクニックになるだろうから、今すぐに必要ではないだろう。」

「念のために、サンプルを掲げる。」

     Fxxxxx   iF  E           K        DISK
     F                                              KINFDS DSINFO
     I******************************************************
     I*     D E F I N E    D A T A  - S T R U C T U R E    *
     I******************************************************
     IDSINFO      DS
     I                                       83  92 DSFILE
     I                                       93 102 DSFLIB
     I                                      129 138 DSMBR   

「ここでは、このプログラムを実行している最中にxxxxxというファイルの属性を取り出している。オープンされたファイル名、ライブラリー名、メンバー名などを取り出している。もちろん、このほかに、レコード件数もだせるぞ。」

「今日はここまで!」

起立、礼、着席

復習コーナー

  • H仕様書とは、プログラム全体に共通するパラメータをセットする部分です。省略すると、データエリアから取り出されます。
  • F仕様書では、どのファイルを、どのよう扱うかを指定します。キー付きファイルを、キーなしファイルとして(到着順処理)扱うこともできます。全手順とRPGサイクル処理もここで決まります。
 

[ Previous ] [ HOME ] [ Upper ] [ Next ]

You are at K's tips-n-kicks of AS/400

 

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送