現時点では、プログラムで使用するフィールドは、プログラム内の DEFINE DATA
ステートメントで定義されています。このフィールド定義をプログラム外のローカルデータエリア(LDA)に配置し、プログラムの DEFINE DATA
ステートメントを使用して、ローカルデータエリアを名前で参照することもできます。再利用および明確なアプリケーション構造という観点から見ると、通常、プログラム外のデータエリアにフィールドを定義することが推奨されます。
情報を DEFINE DATA
ステートメントからローカルデータエリアに再配置します。以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。
このドキュメントには次の演習が含まれています。
必須フィールドを指定するデータエリアエディタを起動します。
データエリアエディタを起動するには
[Direct Command]ウィンドウに次のいずれかを入力します。
EDIT LOCAL
E L
データエリアエディタが表示されます。オブジェクトタイプは "Local" に設定されています。これは、画面の上に示されます。
Press <ESC> to enter command mode Mem: empty Lib: TUTORIAL Type: LOCAL Bytes: 0 Line: 0 of: 0 C T Comment * *** Top of Data Area *** * *** End of Data Area *** F 1 HELP F 2 CHOICE F 3 QUIT F 4 SAVE F 5 STOW F 6 CHECK F 7 READ F 8 CLEAR F 9 MEM TYPE F10 GEN F11 FLD TYPE F12 |
デフォルトでは、データエリアエディタは起動時に編集モードになっています。編集モードからコマンドモード(およびその逆)に切り替えるには、ESC キーを押します。エディタを終了すると、次にエディタを開くときに、現在のモードが再開されます。
次のフィールドを定義します。
レベル | Name | フォーマット | データ長 |
---|---|---|---|
1 | #NAME-START |
A | 20 |
1 | #NAME-END |
A | 20 |
1 | #MARK |
A | 1 |
これらは、DEFINE DATA
ステートメントで前に定義したユーザー定義変数です。
データフィールドを定義するには
データエリアの先頭を示す最初のエントリが、エディタで選択されていることを確認します。
ヒント:
カーソルを移動して行を強調表示できない場合は、コマンドモードになっています。このモードでは、コマンド行が画面上部に表示されます。ESC キーを押して、編集モードに切り替えます。
選択した行の最初の列で、次の行コマンドを入力します。
I
ENTER キーを押す必要はありません。
次のウィンドウが表示されます。
+-----------------------+ ¦ D Data Field ¦ ¦ B Block ¦ ¦ C Constant ¦ ¦ H Handle ¦ ¦ S Structure ¦ ¦ * Comment ¦ +-----------------------+ |
[Data Field]を選択します。
[Data Field Definition]ウィンドウが表示されます。
+-------------------- Data Field Definition ---------------------+ ¦ Level: 1 ¦ ¦ Field Name: ¦ ¦ Field Format: ¦ ¦ Field Length: ¦ ¦ Arraydefinition: ¦ ¦ Edit Mask: ¦ ¦ ¦ ¦ Header Definition: ¦ ¦ ¦ ¦ Initialization: ¦ ¦ Value Clause: ¦ ¦ Optional Param: N ¦ ¦ Comment: ¦ +----------------------------------------------------------------+ |
上の表に示す必須情報をすべて最初のフィールド(#NAME-START
)に対して指定します。次のフィールドに移動するには、方向キーを使用します。
このフィールドの情報をすべて指定したら、ENTER キーを押して情報を保存します。
[Data Field Definition]ウィンドウは開いたままになります。入力フィールドは再び空になり、新しいデータフィールドを定義できます。
上記の手順で、すべての必須情報を残りのフィールド(#NAME-END
および #MARK
)に対して指定します。
すべてのフィールドが追加されたら、ESC キーを押します。
定義したフィールドがエディタに表示されます。
Press <ESC> to enter command mode Mem: Lib: TUTORIAL Type: LOCAL Bytes: 291 Line: 3 of: 3 C T L Name of Datafield F Length Index/Comment M * *** Top of Data Area *** 1 #NAME-START A 20 1 #NAME-END A 20 1 #MARK A 1 * *** End of Data Area *** F 1 HELP F 2 CHOICE F 3 QUIT F 4 SAVE F 5 STOW F 6 CHECK F 7 READ F 8 CLEAR F 9 MEM TYPE F10 GEN F11 FLD TYPE F12 |
ヒント:
フィールド定義に誤りがある場合は、行コマンド E
を使用して、選択したフィールドを編集したり、行コマンド D
を使用して、選択したフィールドを削除したりすることができます。
プログラムの DEFINE DATA
ステートメントで前に定義したデータフィールドをインポートします。フィールドは、Natural データビューからデータエリアエディタに直接読み込まれます。データビューは、データ定義モジュール(DDM)で定義されたデータベースフィールドを参照します。
データエリアエディタで、インポートしたデータフィールドは、現在選択されているデータフィールドの下に挿入されます。
DDM からデータフィールドをインポートするには
[#MARK
]行の最初の列で、次の行コマンドを入力します。
V
[View Definition]ウィンドウが表示されます。
Press <ESC> to enter command mode Mem: Lib: TUTORIAL Type: LOCAL Bytes: 291 Line: 3 of: 3 C T L Name of Datafield F Length Index/Comment M * *** Top of Data Area *** 1 #NAME-START A 20 1 #NAME-END A 20 V 1 #MARK A 1 * *** End of Data Area *** +------------------- View Definition -------------------+ ¦Name of View: ¦ ¦Name of DDM: ¦ ¦Comment: ¦ +-------------------------------------------------------+ F 1 HELP F 2 CHOICE F 3 QUIT F 4 SAVE F 5 STOW F 6 CHECK F 7 READ F 8 CLEAR F 9 MEM TYPE F10 GEN F11 FLD TYPE F12 |
次の情報を入力して ENTER キーを押します。
+------------------- View Definition -------------------+ ¦Name of View: EMPLOYEES-VIEW ¦ ¦Name of DDM: EMPLOYEES ¦ ¦Comment: ¦ +-------------------------------------------------------+ |
表示されるウィンドウに、指定された DDM のフィールドが表示されます。
Press <ESC> to enter command mode Mem: Lib: TUTORIAL Type: LOCAL Bytes: 291 Line: 3 of: 3 C T L Name of Datafield F Length Index/Comment M * *** Top of Data Area *** 1 #NAME-START A 20 1 #NAME-END A 20 V 1 #MARK A 1 * *** End of Data Area *** +------------------------------- DDM: EMPLOYEES -------------------------------+ ¦ 1 AA PERSONNEL-ID A 8 D ¦ ¦ G 1 AB FULL-NAME ¦ ¦ 2 AC FIRST-NAME A 20 N ¦ ¦ 2 AD MIDDLE-I A 1 N ¦ ¦ 2 AE NAME A 20 D ¦ ¦ 1 AD MIDDLE-NAME A 20 N ¦ +------------------------------------------------------------------------------+ HD=PERSONNEL/ID F 1 HELP F 2 CHOICE F 3 QUIT F 4 SAVE F 5 STOW F 6 CHECK F 7 READ F 8 CLEAR F 9 MEM TYPE F10 GEN F11 FLD TYPE F12 |
、1 番目の列に「"X"」を入力して、以下のフィールドをマークします。
PERSONNEL-ID
FULL-NAME
NAME
DEPT
LEAVE-DATA
LEAVE-DUE
DDM 内でスクロールするには、方向キーを使用します。
注意:
フィールド PERSONNEL-ID
は、後でサブプログラムを作成するときに使用します。
必須フィールドをすべてマークしたら、ENTER キーを押します。
ローカルデータエリアが次のように表示されます(方向キーを使用して、データエリアの上部にスクロールします)。
Press <ESC> to enter command mode Mem: Lib: TUTORIAL Type: LOCAL Bytes: 970 Line: 0 of: 10 C T Comment * *** Top of Data Area *** 1 #NAME-START A 20 1 #NAME-END A 20 1 #MARK A 1 V 1 EMPLOYEES-VIEW EMPLOYEES 2 PERSONNEL-ID A 8 G 2 FULL-NAME 3 NAME A 20 2 DEPT A 6 G 2 LEAVE-DATA 3 LEAVE-DUE N 2 * *** End of Data Area *** F 1 HELP F 2 CHOICE F 3 QUIT F 4 SAVE F 5 STOW F 6 CHECK F 7 READ F 8 CLEAR F 9 MEM TYPE F10 GEN F11 FLD TYPE F12 |
[T]列は、変数タイプを示します。ビューは "V" で示され、各グループは "G" で示されます。
ESC キーを押して、コマンドモードに入ります。
ローカルデータエリアを格納し、「"LDA01"」という名前を付けます。
STOW LDA01
ローカルデータエリアを格納すると、Natural プログラムから参照できます。
定義したローカルデータエリアを使用するため、プログラムの DEFINE DATA
ステートメントを変更します。
プログラムでローカルデータエリアを使用するには
データエリアエディタのコマンド行で次のように入力して、プログラムエディタに戻ります。
E PGM01
DEFINE DATA
ステートメントで、LOCAL
と END-DEFINE
の間にある変数をすべて削除します(行コマンドD
を使用します)。
LOCAL
行を次のように変更して、ローカルデータエリアへの参照を追加します。
LOCAL USING LDA01
プログラムは次のようになります。
DEFINE DATA LOCAL USING LDA01 END-DEFINE * RP1. REPEAT * INPUT USING MAP 'MAP01' * IF #NAME-START = '.' THEN ESCAPE BOTTOM (RP1.) END-IF * IF #NAME-END = ' ' THEN MOVE #NAME-START TO #NAME-END END-IF * RD1. READ EMPLOYEES-VIEW BY NAME STARTING FROM #NAME-START ENDING AT #NAME-END * IF LEAVE-DUE >= 20 THEN PERFORM MARK-SPECIAL-EMPLOYEES ELSE RESET #MARK END-IF * DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK * END-READ * IF *COUNTER (RD1.) = 0 THEN REINPUT 'No employees meet your criteria.' END-IF * END-REPEAT * DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES MOVE '*' TO #MARK END-SUBROUTINE * END
プログラムを実行します。
以前と同じ結果であることを確認するため(DEFINE DATA
ステートメントでローカルデータエリアを参照しなかった場合)、開始名として「"JONES"」と入力し、ENTER キーを押します。
プログラムエディタに戻るには、MORE
プロンプトで「EDIT
」と入力します。
プログラムを格納します。
次の演習に進みます。グローバルデータエリア