登録集ファイルを利用する場合、PowerCOBOLでは#INCLUDE文を使います。
#INCLUDE文を使うことにより、PowerCOBOL固有のプロパティへのアクセスやメソッドの呼び出し処理で、登録集ファイル内で定義されたデータ項目を利用することや、同一の完結文を複数の手続き中で利用することができます。
#INCLUDE文の書き方
#INCLUDE ”登録集ファイル名”
#INCLUDE文で展開する原文が記述されている、ファイルの名前です。
ファイルの形式は可変長でなければなりません。
#INCLUDE文の記述規則
#INCLUDE文は、データ部および環境部の、A領域またはB領域でデータの宣言を取り込むために記述できます。
#INCLUDE文は、手続き部で完結文を取り込むために記述できます。
登録集ファイル内の原文中に、#INCLUDE文を記述できます。
#INCLUDE文の入れ子は、15階層まで利用できます。
#INCLUDE文の入れ子によって、同じ登録集ファイルを再帰的に利用することはできません。
登録集ファイル内の原文は、COBOLの文法に従います。
登録集ファイル内の原文中に、COBOLの原始文操作機能(COPY文)を記述することもできます。ただし、COPY文で取り込まれる登録集ファイル内の原文中には#INCLUDE文を記述できません。
#INCLUDE文の使用例
登録集ファイル"NUMDATA.COB"を利用する場合、以下のように記述します。
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. #INCLUDE "NUMDATA.COB". PROCEDURE DIVISION. ・ ・ MOVE "Text" OF "TableCells"(WK-1 WK-2) OF Table1 TO WK-D1. MOVE WK-D1 TO WK-D2.
登録集ファイル"NUMDATA.COB"の内容は、以下のように記述します。
000100 01 WK-G. 000200 02 WK-D1 PIC 9(8). 000300 02 WK-D2 PIC 9(8). 000400 01 WK-1 PIC S9(9) COMP-5. 000500 01 WK-2 PIC S9(9) COMP-5.
注意
COBOLのCOPY文を使って登録集ファイルを利用することもできます。ただし、その場合、登録集ファイル内で定義されたデータ項目を、プロパティへのアクセスやメソッドの呼び出し処理で使用することはできません。使用した場合、エラーとなります。
たとえば、上記の例で#INCLUDE文をCOPY文に置き換えた場合、2つめの手続きはエラーにはなりませんが、1つめの手続きは表コントロールのプロパティへアクセスしているため、エラーとなります。
これは、フォームを翻訳する場合の、PowerCOBOLの実行論理によるものです。「イベント駆動型のプログラムスタイル」で説明したように、PowerCOBOLは、記述されたイベント手続きを、COBOLコンパイラで翻訳する直前に1つのプログラムにまとめています。同時にプロパティへのアクセスやメソッド呼び出し文を、COBOLコンパイラが認識できる形に変換しています。また、使用しているデータの項類をCOMの型と対応づけています。
#INCLUDE文で指定された登録集ファイルは、この変換処理の最中に展開されます。したがって、登録集ファイル内で定義されたデータ項目を、プロパティへのアクセスやメソッドの呼び出し文の変換時に認識できます。
これに対し、COPY文で指定された登録集ファイルは、COBOL翻訳時に展開されます。したがって、登録集ファイル内のデータ項目を、プロパティへのアクセスやメソッド呼び出し文の変換時に認識できません。
#INCLUDE文で取り込むファイルが#INCLUDE文の記述規則に違反している場合、デバッガおよび診断機能を正しく利用できない場合があります。この場合、#INCLUDE文の記述規則を満たすようにソースプログラムを修正してください。