COBOLでSYSINをアクセスする

下記に示すようなJCLで示されるプログラム(PROG1)があったとして、PROG1をCOBOLで作る場合、DD * ステートメントで定義されたデータにどうやってアクセスすればいいのか?ということで検索されていたと考えます。


//STEP1 EXEC PGM=PROG1
//OUTLIST DD SYSOUT=*
//DATAIN DD *
ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890
//

順次データセットとしてアクセスする

SYSINであろうがSYSOUTであろうが、プログラムからは順次データセットに見えますから、順次ファイルにアクセスする手順でプログラムを書くことできます。実際、どこに(例えば、DASDやTAPE上のデータセットなのか、JESのスプールなのか)書き出される、どこから読み込まれるかは、JCLのDDステートメントに定義されます。

ACCEPT、DISPLAY命令でアクセスする

DD名を言語が定めたものに合わせることができるなら、もっと簡単方法もあります。入力データのDD名を「SYSIN」にできるならACCEPT命令が使えます。この場合、プログラムでファイルをオープンしたりクローズする必要もありません。


//STEP1 EXEC PGM=PROG1
//SYSIN DD *
ABCDEFGHIJKLMNOPQRSTUVWXYZ
1234567890
//

  • 実行JCLの例

出力であれば、DISPLAY命令でSYSOUTに出力できます。SYSOUTへの出力の場合、JCLにSYSOUT DD文がなければ、OSのLE(言語環境プログラム)が、自動的にSYSOUTデータセットを割り振ります(z/OSの場合)。ACCEPTとDISPLAY命令による方法は簡単ですが、DD名は規定されてしまっています(SYSIN、SYSOUTなど、詳細はCOBOLのマニュアルを参照)。それ以外の名前のDD名にしたい場合(例えば、SYSINのDD名は別目的で使用してしまっている等)は、順次ファイルとして定義してアクセスします。