ローカルデータエリア

現時点では、プログラムで使用するフィールドは、プログラム内の DEFINE DATA ステートメントで定義されています。このフィールド定義をプログラム外のローカルデータエリア(LDA)に配置し、プログラムの DEFINE DATA ステートメントを使用して、ローカルデータエリアを名前で参照することもできます。再利用および明確なアプリケーション構造という観点から見ると、通常、プログラム外のデータエリアにフィールドを定義することが推奨されます。

情報を DEFINE DATA ステートメントからローカルデータエリアに再配置します。以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。

Application structure

このドキュメントには次の演習が含まれています。


ローカルデータエリアの作成

必須フィールドを指定するデータエリアエディタを起動します。

Start of instruction setデータエリアエディタを起動するには

  • 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 ステートメントで前に定義したユーザー定義変数です。

Start of instruction setデータフィールドを定義するには

  1. データエリアの先頭を示す最初のエントリが、エディタで選択されていることを確認します。

    ヒント:
    カーソルを移動して行を強調表示できない場合は、コマンドモードになっています。このモードでは、コマンド行が画面上部に表示されます。ESC キーを押して、編集モードに切り替えます。

  2. 選択した行の最初の列で、次の行コマンドを入力します。

    I

    ENTER キーを押す必要はありません。

    次のウィンドウが表示されます。

    +-----------------------+
    ¦ D Data Field          ¦
    ¦ B Block               ¦
    ¦ C Constant            ¦
    ¦ H Handle              ¦
    ¦ S Structure           ¦
    ¦ * Comment             ¦
    +-----------------------+
  3. 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:                                                       ¦
    +----------------------------------------------------------------+
  4. 上の表に示す必須情報をすべて最初のフィールド(#NAME-START)に対して指定します。次のフィールドに移動するには、方向キーを使用します。

  5. このフィールドの情報をすべて指定したら、ENTER キーを押して情報を保存します。

    Data Field Definition]ウィンドウは開いたままになります。入力フィールドは再び空になり、新しいデータフィールドを定義できます。

  6. 上記の手順で、すべての必須情報を残りのフィールド(#NAME-END および #MARK)に対して指定します。

  7. すべてのフィールドが追加されたら、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 を使用して、選択したフィールドを削除したりすることができます。

DDM からの必須データフィールドのインポート

プログラムの DEFINE DATA ステートメントで前に定義したデータフィールドをインポートします。フィールドは、Natural データビューからデータエリアエディタに直接読み込まれます。データビューは、データ定義モジュール(DDM)で定義されたデータベースフィールドを参照します。

データエリアエディタで、インポートしたデータフィールドは、現在選択されているデータフィールドの下に挿入されます。

Start of instruction setDDM からデータフィールドをインポートするには

  1. #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
  2. 次の情報を入力して 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
  3. 、1 番目の列に「"X"」を入力して、以下のフィールドをマークします。

    PERSONNEL-ID
    FULL-NAME
    NAME
    DEPT
    LEAVE-DATA
    LEAVE-DUE

    DDM 内でスクロールするには、方向キーを使用します。

    注意:
    フィールド PERSONNEL-ID は、後でサブプログラムを作成するときに使用します。

  4. 必須フィールドをすべてマークしたら、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" で示されます。

  5. ESC キーを押して、コマンドモードに入ります。

  6. ローカルデータエリアを格納し、「"LDA01"」という名前を付けます。

    STOW LDA01

プログラムからのローカルデータエリアの参照

ローカルデータエリアを格納すると、Natural プログラムから参照できます。

定義したローカルデータエリアを使用するため、プログラムの DEFINE DATA ステートメントを変更します。

Start of instruction setプログラムでローカルデータエリアを使用するには

  1. データエリアエディタのコマンド行で次のように入力して、プログラムエディタに戻ります。

    E PGM01
  2. DEFINE DATA ステートメントで、LOCALEND-DEFINE の間にある変数をすべて削除します(行コマンドD を使用します)。

  3. 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
  4. プログラムを実行します。

  5. 以前と同じ結果であることを確認するため(DEFINE DATA ステートメントでローカルデータエリアを参照しなかった場合)、開始名として「"JONES"」と入力し、ENTER キーを押します。

  6. プログラムエディタに戻るには、MORE プロンプトで「EDIT」と入力します。

  7. プログラムを格納します。

次の演習に進みます。グローバルデータエリア