COBOL2002 使用の手引 手引編


6.2.2 環境変数指定

環境変数指定は,指定したファイル名に対し,ASSIGN句で外部装置名(処理系作成者語)を割り当てる方法です。外部装置名に対応する物理ファイル名は,外部装置名に対応する環境変数を使用して指定します。

COBOLプログラムでの外部装置名の記述と,環境変数の指定形式を次に示します。

形式(COBOLプログラム)
SELECT 〔OPTIONAL〕 ファイル名 ASSIGN TO 外部装置名
形式(環境変数)
CBL_外部装置名=物理ファイル
構文規則
  • ASSIGN句で指定した外部装置名に対応する環境変数は,外部装置名の先頭にCBL_を付けたものとなります。この環境変数に,外部装置名と対応づけたい物理ファイル名を指定します。

  • 外部装置名に「-」が含まれる場合,環境変数名では「_」に置き換えます。

  • 物理ファイル名は,ルートからの絶対パス名を指定します。このファイル名は,ファイルシステムの規則に従って指定する必要があります。

  • ディレクトリ名,ファイル名にNULL文字(X'00')を含んではなりません。NULL文字を含んだディレクトリやファイル名を指定した場合,NULL文字の直前までの文字列が有効となり,以降の文字列は無視されます。

一般規則
  • 次の場合,環境変数で指定した物理ファイルがなければ,指定した名称の物理ファイルが作成されます。

(物理ファイルが作成される場合)
  1. ファイルをOUTPUTモードで開いたとき

  2. SELECT句のOPTIONAL指定のあるファイルをI-OまたはEXTENDモードで開いたとき

    このとき,SELECT句にOPTIONAL指定がある場合は,入出力状態に05が設定されます。

  • ファイルが作成される場所は,環境変数に指定した物理ファイル名の絶対パスに従います。ただし,指定した物理ファイル名中のディレクトリ名に相当するディレクトリがないと,物理ファイルは作成されません。

  • 外部装置名にSYSIN,SYSOUT,SYSPUNCHを割り当てた場合,次に示す文があると同一ファイルへの割り当てになります。このとき,結果は保証しませんので注意してください。

    ・SYSIN指定のACCEPT文

    ・SYSOUT/SYSPUNCH指定のDISPLAY文

  • 環境変数によって指定されるファイル名が有効となるかどうかは,ファイルシステムに依存します。

  • ファイル名が絶対パス名でない場合は,OSの環境設定に従います。

  • ファイルを標準入力(stdin)から読み込んだり,標準出力(stdout)または標準エラー出力(stderr)へ書き出したりしたい場合は,環境変数にstdin,stdout,またはstderrを指定します。ただし,索引編成ファイル,相対編成ファイル,順編成の行制御のない可変長ファイルには,stdin,stdout,およびstderrを指定できません。また,順編成の可変長ファイルには,stdinを指定できません。指定した場合,実行時にエラーとなります。

  • 標準入出力ファイルを扱う場合,COBOLはすでに開かれているものとして処理します。

  • 環境変数CBL_外部装置名は,OPEN文を実行するごとに環境変数の値が参照されます。

  • 標準入力(stdin),標準出力(stdout),および標準エラー出力(stderr)を指定する場合は,英小文字で指定してください。「STDIN」のように英大文字で指定した場合,物理ファイル名として扱われます。

  • 環境変数に物理ファイル名を割り当てていない場合は,作成するファイルの名称が不明のためエラーとなります。

入出力状態の値とファイル自動生成規則(環境変数指定の場合)

環境変数指定でファイルを割り当てた場合,ファイル入出力時の入出力状態の値,および物理ファイルが自動作成されるかどうかは,次の規則に従います。

OPENモード

OPTIONAL指定の有無

環境変数指定あり

環境変数指定なし

物理ファイルの状態

すでに存在する

存在しない

INPUT

なし

FS=00

FS=35

FS=90

あり

FS=00

FS=05

自動作成されない

FS=05

自動作成されない

I-O

なし

FS=00

FS=35

FS=90

あり

FS=00

FS=05

自動作成される※1

FS=90

OUTPUT

なし

FS=00

再作成される※2

FS=00

自動作成される※1

FS=90

EXTEND

なし

FS=00

FS=35

FS=90

あり

FS=00

FS=05

自動作成される※1

FS=90

(凡例)

FS=nn:FILE STATUS句を指定したときに,入出力状態にnnが設定されることを示す

環境変数の値にファイル名を指定していない場合は,環境変数名なしとみなされます。

注※1

自動作成される物理ファイル名は,環境変数で指定した名称となります。

注※2

再作成とは,ファイル中にデータレコードがない状態にすることです。

COBOLプログラムの記述例

プログラム内で使用するファイル名"FILE-1"を外部装置名SYS-01に割り当てる例を,次に示します。

       SELECT FILE-1 ASSIGN TO SYS-01

外部装置名SYS-01に対応する環境変数「CBL_SYS_01」に,物理ファイル名"/DIR/FILE1.FIL"を指定する例を,次に示します。sh(Bシェル)を使用する場合の指定例です。

CBL_SYS_01=/DIR/FILE1.FIL
export CBL_SYS_01