RPGの変数定義

RDiでRPGⅢを書きました。

リモート・システム LEPXエディター RDiでRPG3を編集するエディタ「リモート・システム LEPXエディター」です。 ...

変数のテスト

C仕様書で変数を利用してみます。

RPGⅢでは、変数の定義(型と桁数を決める)と同時に利用できます。

下記の例では300行目にCOUNTという変数を定義と同時にゼロにしてから0を足しています。

少数部分に0を定義してますので、COUNTはパック10進数になります。

コンパイルリストの相互参照表をみると、フィールド名がCOUNT(パック10進数)を300行目で定義し、400行目で利用しているのがわかります。

RPGⅢの変数は複数回、定義できる!

300行目の内容と同じものを500行目に追加するとどうなるでしょう。

同じ変数を複数回、定義してるので、通常はコンパイルエラーになりそうだけども

コンパイルエラーになりません!

相互参照表には

定義が2つあることになっています。

RPGⅢの変数は後で定義できる!

300行目の変数の定義部分を消します。

定義してないのにZ-ADDで計算しているのでエラーになりそうだけども

コンパイルエラーになりません!

相互参照表には

300行目は定義(D)ではなく、変更(M)になりました。

もともとは、定義(D)かつ変更(M)で、「300D」でしたが、定義部分がなくなり、「300M」になりました。

つまり、変数の値を変更するより後の行に定義があっても問題ありません。

属性が異なる定義をすると

同じフィールド名(変数名)で桁数が異なる定義をしました。

どちらが有効になるのでしょうか、

相互参照表には

先に定義した20桁になっています。

ただし、コンパイルエラーになります。

ソースリスト

ここまでコンパイルはACS上で行っていましたが、RDiのバッチコマンドでコンパイルしてみました。

エラーリストにエラーが表示され、クリックすると対象の行がわかります。

RPGⅢの変数は

変数の定義はソース上ならどこでもOKです。通常は最初に1回だけ定義します。既存の誰かが作ったソースをみると、たまに重複してたり、あとに書いてあるソースがあります。たぶん、コピペによって作られたものかと思います。

同じ変数名で属性が異なる定義はコンパイルエラーになります。

↑これは重要なことですが、RPGに関係なく、「同じ名前で属性が異なる変数」をシステム内で使うべきではないです。

RDBのテーブル間でリレーションがあるものは、同じ名前で同じ属性ですよね。例えば、受注見出しテーブルの「受注ID」と受注明細テーブルの「受注ID」は属性が異なったらおかしいです。

(ただし、RPGのファイルの場合、上記の「受注ID」のフィールド名は、ファイルが異なると別の名前で定義します。フィールド名はファイル名に依存してプレフィックスをつけます。)

外部で定義した変数の取り込み

F仕様書で外部定義を指定することで、外部で定義した変数をRPGのなかに取り込む(宣言)することができます。

以下の物理ファイル(T01P)をF仕様書で読み込むことにしました。

F仕様書に物理ファイルを参照する宣言(宣言のみで参照してないのでコンパイルエラーになります)

コンパイルリストのソースリストには、F仕様書で指定した物理ファイルのフィールド名が追加されます。

相互参照表をみると

A000001行とA000002行にフィールドを宣言したことがわかります。

ただし、参照してないので警告がついています。

物理ファイルをREADするように変更してコンパイルします。

(下記の700行目でREADできた瞬間に、フィールドT01010とT01020にREADした値がセットされます。)

ソースリストは

相互参照表は一部のフィールドは参照してない警告がでますが

正常にコンパイル完了しました。

RPGⅢは外部からのインプットを処理(加工)し、外部へアウトプットします。

そのとき、変数(フィールド)をRPGのなかではなく、外部の定義済みの定義を利用することができます。

外部の定義とは物理ファイルのDDSや、画面ファイルのDDS、印刷ファイルのDDSです。

以上です。

スポンサーリンク
memordmレクタングル(大)
memordmレクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
memordmレクタングル(大)