INCLUDE

INCLUDE copycode-name [operand1] 99

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。


関数

INCLUDE ステートメントは、コピーコードタイプの外部オブジェクトのソース行を別のオブジェクトにコンパイル時に取り込みます。

INCLUDE ステートメントはコンパイル時に評価されます。コピーコードのソース行は、INCLUDE ステートメントを含むプログラムのソース行に、物理的に組み込まれるわけではありません。プログラムのコンパイル時に組み込まれた結果が、オブジェクトモジュールとなります。

注意:
INCLUDE ステートメントを含むソースコード行に、他のステートメントは指定できません。

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C         A U                       × ×

構文要素の説明:

構文要素 説明
copycode-name
コピーコード名:

copycode-name には、挿入するソースを持つコピーコードの名前を指定します。

copycode-name にはアンパサンド(&)を含めることができます。この文字は、コンパイル時に Natural システム変数 *LANGUAGE の現在の値に対応する 1 文字コードで置き換えられます。この機能で複数言語のコピーコード名を使用できます。

指定するオブジェクトは、コピーコードタイプにする必要があります。コピーコードは、INCLUDE ステートメントを持つプログラムと同一ライブラリ、または STEPLIB(デフォルトの STEPLIB は SYSTEM)に保存します。

コピーコードのソースが変更された場合、その変更をオブジェクトコードに反映させるには、変更したコピーコードを使用する全プログラムを再コンパイルする必要があります。

コピーコードのソースコードは構文的に完全なステートメトで構成されている必要があります。

operand1
ダイナミック挿入に値を挿入:

組み込むコピーコードの値をダイナミックに挿入できます。この値は operand1 で指定します。

コピーコードでは、値は次の表記で参照されます。

&n&

つまり、値が挿入される位置を &n& で指定します。nINCLUDE ステートメントで渡される各値の順番号です。例えば、&3& 指定は、ステートメントで指定された 3 番目の値を参照します。

コピーコード内の各 &n& に対して、INCLUDE ステートメントに値を指定する必要があります。例えば、コピーコードが &5& を含んでいる場合、operand1 は少なくとも 5 回指定する必要があります。

1つのコピーコードパラメータ(&n&)を、空白を入れずに別のコピーコードパラメータの後に指定することができます(&1&&2&&3&)。この方法は、複数のコピーコードパラメータをソースへ連結するために使用されます。

文字列を、空白を入れずに 1 つまたは複数のコピーコードパラメータに続けることができます(&1&abc または &1&&2&abc)。この方法は、複数のコピーコードパラメータに文字列を連結するために使用されます。

注意:
&n& は識別子の有効な部分であるため、この表記法は、上記の他の位置でコピーコードパラメータ代用(abc&1& または &1&abc&2&)として使用することはできません。つまり、文字列は、コピーコードパラメータの後にのみ指定可能で、前または間に指定することはできません。

INCLUDE ステートメントに値を指定してもコピーコード内で参照しなければ無視されます。

例 1 - コピーコードを含む INCLUDE ステートメント

INCLUDE ステートメントを含むプログラム:

** Example 'INCEX1': INCLUDE  (include copycode)                        
************************************************************************
*                                                                       
WRITE 'Before copycode'                                                 
*                                                                       
INCLUDE INCEX1C                                                    
*                                                                       
WRITE 'After copycode'                                                  
*                                                                       
END

含めるコピーコード INCEX1C:

** Example 'INCEX1C': INCLUDE (copycode used by INCEX1)                 
************************************************************************
*                                                                       
WRITE 'Inside copycode'

プログラム INCEX1 の出力:

Page      1                                                  05-01-25  16:26:36
                                                                               
Before copycode                                                                
Inside copycode                                                                
After copycode

例 2 - パラメータのあるコピーコードを含む INCLUDE ステートメント

INCLUDE ステートメントを含むプログラム INCEX2:

** Example 'INCEX2': INCLUDE  (include copycode with parameters)        
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPL-VIEW VIEW OF EMPLOYEES                                           
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
*                                                                       
INCLUDE INCEX2C 'EMPL-VIEW' 'NAME' '''ARCHER''' '20' '''BAILLET'''     
*                                                                       
END

含めるコピーコード INCEX2C:

** Example 'INCEX2C': INCLUDE (copycode used by INCEX2)                 
************************************************************************
* Transferred parameters from INCEX2:                                   
*                                                                       
* &1& : EMPL-VIEW                                                       
* &2& : NAME                                                            
* &3& : 'ARCHER'                                                        
* &4& : 20                                                              
* &5& : 'BAILLET'                                                       
*                                                                       
*                                                                       
READ (&4&) &1&  BY &2&  = &3&                                           
  DISPLAY &2&                                                           
  IF &2& = &5&                                                          
    WRITE 5X 'LAST RECORD FOUND' &2&                                    
    STOP                                                                
  END-IF                                                                
END-READ                                                                
*                                                                       
* Statements above will be completed to:  
*                                         
* READ (20) EMPL-VIEW  BY NAME  = 'ARCHER'
*   DISPLAY NAME                          
*   IF NAME = 'BAILLET'                   
*     WRITE 5X 'LAST RECORD FOUND' NAME   
*     STOP                                
*   END-IF                                
* END-READ

プログラム INCEX2 の出力:

Page      1                                                  05-01-25  16:30:43
                                                                               
        NAME                                                                   
--------------------                                                           
                                                                               
ARCHER                                                                         
ARCONADA                                                                       
ARCONADA                                                                       
ARNOLD                                                                         
ASTIER                                                                         
ATHERTON                                                                       
ATHERTON                                                                       
ATHERTON                                                                       
AUBERT                                                                         
BACHMANN                                                                       
BAECKER                                                                        
BAECKER                                                                        
BAGAZJA                                                                        
BAILLET                                                                        
     LAST RECORD FOUND BAILLET

例 3 - ネスト構造のコピーコードを使用した INCLUDE ステートメント

INCLUDE ステートメントを含むプログラム:

** Example 'INCEX3': INCLUDE  (using nested copycodes)                  
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (I4)                                                               
END-DEFINE                                                              
*                                                                       
MOVE 123 TO #A                                                          
WRITE 'Program  INCEX3  ' '=' #A                                        
*                                                                       
INCLUDE INCEX31C '#A' '5'            /* source line is #A := 5          
*                                                                       
*                                                                       
MOVE 300 TO #A                                                          
WRITE 'Program  INCEX3  ' '=' #A                                        
*                                                                       
INCLUDE INCEX32C '''#A'''  '''20'''  /* source line is #A := 20         
*                                                                       
WRITE 'Program  INCEX3  ' '=' #A                                        
END

含めるコピーコード INCEX31C:

** Example 'INCEX31C': INCLUDE (copycode used by INCEX3)                
************************************************************************
* Transferred parameters from INCEX3:                                   
*                                                                       
* &1& : #A                                                              
* &2& : 5                                                               
*                                                                       
*                                                                       
&1& := &2&                                                              
*                                                                       
WRITE 'Copycode INCEX31C' '=' &1&

含めるコピーコード INCEX32C:

** Example 'INCEX32C': INCLUDE (copycode used by INCEX3)                
************************************************************************
* Transferred parameters from INCEX3:                                   
*                                                                       
* &1& : '#A'                                                            
* &2& : '20'                                                            
*                                                                       
*                                                                       
WRITE 'Copycode INCEX32C' &1& &2&                                       
*                                                                       
INCLUDE INCEX31C &1& &2&

プログラム INCEX3 の出力:

Page      1                                                  05-01-25  16:35:36
                                                                               
Program  INCEX3   #A:         123                                              
Copycode INCEX31C #A:           5                                              
Program  INCEX3   #A:         300                                              
Copycode INCEX32C #A 20                                                        
Copycode INCEX31C #A:          20                                              
Program  INCEX3   #A:          20

例 4 - コピーコードに連結パラメータを含む INCLUDE ステートメント

INCLUDE ステートメントを含むプログラム:

** Example 'INCEX4': INCLUDE  (with concatenated parameters in copycode)
************************************************************************
DEFINE DATA LOCAL                                                       
1 #GROUP                                                                
  2  ABC(A10) INIT <'1234567890'>                                       
END-DEFINE                                                              
*                                                                       
INCLUDE INCEX4C  '#GROUP.'  'ABC'  'AB'                              
*                                                                       
END

含めるコピーコード INCEX4C:

** Example 'INCEX4C': INCLUDE (copycode used by INCEX4)                 
************************************************************************
* Transferred parameters from INCEX4:                                   
*                                                                       
* &1& : #GROUP.                                                         
* &2& : ABC                                                             
* &3& : AB                                                              
*                                                                       
*                                                                       
WRITE  '=' &2&          /* 'ABC'             results into ABC           
WRITE  '=' &1&ABC       /* '#GROUP.' ABC     results into #GROUP.ABC    
WRITE  '=' &1&&2&       /* '#GROUP.' 'ABC'   results into #GROUP.ABC    
WRITE  '=' &1&&3&C      /* '#GROUP.' 'AB' C  results into #GROUP.ABC

プログラム INCEX4 の出力:

Page      1                                                  05-01-25  16:37:59
                                                                               
ABC: 1234567890                                                                
ABC: 1234567890                                                                
ABC: 1234567890                                                                
ABC: 1234567890