10.4 環境変数へのアクセス
ACCEPT文,DISPLAY文を使用して,環境変数の値を取得・設定する方法について説明します。
環境変数のアクセスについては,マニュアル「COBOL2002 言語 拡張仕様編」 「10 コマンド行のアクセス」を参照してください。
(1) 環境変数の値の読み込み
- DISPLAY文(環境変数名の設定)の形式
DISPLAY {一意名4|定数1} UPON 呼び名3※1 〔END-DISPLAY〕
- ACCEPT文(環境変数の値の取得)の形式
ACCEPT 一意名2 FROM 呼び名4※2 〔ON EXCEPTION 無条件文3〕 〔NOT ON EXCEPTION 無条件文2〕 〔END-ACCEPT〕
- 注※1
-
呼び名3は,環境部の特殊名段落で,ENVIRONMENT-NAMEに関連づけておく必要があります。
- 注※2
-
呼び名4は,環境部の特殊名段落で,ENVIRONMENT-VALUEに関連づけておく必要があります。
(2) 環境変数への値の書き出し
- DISPLAY文(環境変数名の設定)の形式
DISPLAY {一意名4|定数1} UPON 呼び名3※1 〔END-DISPLAY〕
- DISPLAY文(環境変数の値の書き出し)の形式
DISPLAY {一意名2|定数2} UPON 呼び名4※2 〔ON EXCEPTION 無条件文1〕 〔NOT ON EXCEPTION 無条件文2〕 〔END-DISPLAY〕
- 注※1
-
呼び名3は,環境部の特殊名段落で,ENVIRONMENT-NAMEに関連づけておく必要があります。
- 注※2
-
呼び名4は,環境部の特殊名段落で,ENVIRONMENT-VALUEに関連づけておく必要があります。
(3) 環境変数へのアクセスに関する規則
-
環境変数名および環境変数の値を設定する場合,DISPLAY文に指定した一意名または定数中に含まれる空白も有効となります。
-
環境変数名を設定する場合,環境変数名には"="を指定できません。指定した場合,正常に動作しなくなることがあります。
-
環境変数名を設定する場合,環境変数名にNULL(X'00')が含まれているとき,NULLの直前までの値が有効となります。環境変数の値を設定する場合,環境変数の値にNULL(X'00')が含まれているとき,NULLの直前までの値が有効となります。
-
環境変数の値を取得する場合,環境変数が存在しないとき,ACCEPT文で実行時エラーとなります。
-
環境変数名の先頭にNULL(X'00')を指定したときの規則を次に示します。
-
環境変数の値の取得処理(ACCEPT文)は,エラーとなります。
-
環境変数の値の設定処理(DISPLAY文)は,何も処理しません。
-
-
次に示す文の組み合わせは,プログラム間にわたって指定できます。
-
環境変数名を設定するDISPLAY文と環境変数の値を取得するACCEPT文
-
環境変数名を設定するDISPLAY文と環境変数の値を設定するDISPLAY文
-
-
環境変数の値を取得するときの転記規則を次に示します。
-
環境変数の値は,一意名の左端から順に転送されて転記されます。
-
環境変数の値が一意名の領域より長い場合,一意名の長さで区切られます。
-
環境変数の値が一意名の領域より短い場合,標準コードの空白文字(X'20')が埋められます。
-
-
次の環境変数には,環境変数へのアクセス機能で値を書き出せません。
-
CBLTDEXEC
-
-
環境変数の値の書き出しを行うDISPLAY文の実行回数は,環境変数CBLENVMAXで設定します。
- 形式
-
CBLENVMAX=回数
規則
-
回数は,8けた以内の符号なしの正の整数で指定します。
-
環境変数CBLENVMAXを指定しなかった場合,または値が0の場合は,50が仮定されます。
-
環境変数CBLENVMAXで負の値を設定した場合,または9けた以上の値を設定した場合はエラーメッセージが出力され異常終了します。
-
DISPLAY文による環境変数への値の書き出しによって,環境変数CBLENVMAXを設定することはできません。
-
環境変数の値をクリアせずにCOBOLプログラムの実行を終了し,あとに同じプロセスでCOBOLプログラムが動作した場合,環境変数を設定しなくても以前実行時に設定した環境変数の値を取得できます。
COBOLプログラムを終了する前にNULL(X'00')で始まる値を設定することで,値のない環境変数を設定できます。
-
DISPLAY文の呼び名4指定で書き出す環境変数の値の長さは,32,766バイト以内でなければなりません。32,766バイトを超える値を指定した場合,32,766バイトまでの値を環境変数に書き出します。
-
ACCEPT文の呼び名4指定で取得する環境変数の値の長さは,32,766バイト以内でなければなりません。32,766バイトを超える環境変数の値を指定した場合,実行時エラーとなります。
(4) 使用例
- 実行時の環境変数指定
CBLABNLST=/tmp/abnlst CBLDDUMP=/tmp/dumplst
- プログラム例1
-
環境変数へのアクセス例を次に示します。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ENVIRONMENT-NAME IS ENVNAM ENVIRONMENT-VALUE IS ENVVAL. DATA DIVISION. WORKING-STORAGE SECTION. 01 ENVNAME1 PIC X(9). 01 ENVNAME2 PIC X(8). 01 ENVDATA PIC X(20). PROCEDURE DIVISION. : MOVE 'CBLABNLST' TO ENVNAME1. DISPLAY ENVNAME1 UPON ENVNAM. …1. ACCEPT ENVDATA FROM ENVVAL …2. ON EXCEPTION 〜 : NOT ON EXCEPTION 〜 : END-ACCEPT. : MOVE 'CBLDDUMP' TO ENVNAME2. MOVE '/tmp/dumplst2' TO ENVDATA. DISPLAY ENVNAME2 UPON ENVNAM. …3. DISPLAY ENVDATA UPON ENVVAL …4. ON EXCEPTION 〜 : NOT ON EXCEPTION 〜 : END-DISPLAY. :
-
値を取得したい環境変数名(CBLABNLST)を指定します。
-
1.で指定した環境変数(CBLABNLST)の値(/tmp/abnlst)を取得します。
-
値を設定したい環境変数名(CBLDDUMP)を指定します。
-
3.で指定した環境変数(CBLDDUMP)に値(/tmp/dumplst2)を設定します。
-
- プログラム例2
-
環境変数へのアクセスがプログラム間にわたる場合の,環境変数の値の取得例を次に示します。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ENVIRONMENT-NAME IS ENVNM. : DATA DIVISION. WORKING-STORAGE SECTION. 01 ENVNAME PIC X(9). PROCEDURE DIVISION. : MOVE 'CBLABNLST' TO ENVNAME. DISPLAY ENVNAME UPON ENVNM. …1. : CALL 'SAMPLE2'. : IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE2. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ENVIRONMENT-VALUE IS ENVVAL. : DATA DIVISION. WORKING-STORAGE SECTION. 01 ENVDATA PIC X(20). PROCEDURE DIVISION. : ACCEPT ENVDATA FROM ENVVAL …2. ON EXCEPTION 〜 : NOT ON EXCEPTION 〜 : END-ACCEPT. :
-
値を取得したい環境変数名(CBLABNLST)を指定します。
-
1.で指定した環境変数(CBLABNLST)の値(/tmp/abnlst)を取得できます。
-
- プログラム例3
-
環境変数へのアクセスがプログラム間にわたる場合の,環境変数の値の設定例を次に示します。
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ENVIRONMENT-NAME IS ENVNM. : DATA DIVISION. WORKING-STORAGE SECTION. 01 ENVNAME PIC X(9). PROCEDURE DIVISION. : MOVE 'CBLABNLST' TO ENVNAME. DISPLAY ENVNAME UPON ENVNM. …1. : CALL 'SAMPLE2'. : IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE2. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ENVIRONMENT-VALUE IS ENVVAL. : DATA DIVISION. WORKING-STORAGE SECTION. 01 ENVDATA PIC X(20). PROCEDURE DIVISION. : MOVE '/tmp/abnlst' TO ENVDATA. DISPLAY ENVDATA UPON ENVVAL …2. ON EXCEPTION 〜 : NOT ON EXCEPTION 〜 : END-DISPLAY. :
-
値を設定したい環境変数名(CBLABNLST)を指定します。
-
1.で指定した環境変数(CBLABNLST)に(/tmp/abnlst)を設定できます。
-