現時点では、プログラムで使用するフィールドは、プログラム内の 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」と入力します。
プログラムを格納します。
次の演習に進みます。グローバルデータエリア