COBOLでSYSINをアクセスする
By 神居 - Posted: 2010/09/20 Last updated: 2010/09/20
- Leave a Comment
COBOLプログラムでSYSINにアクセスする
//STEP1 EXEC PGM=PROG1 //OUTLIST DD SYSOUT=* //DATAIN DD * ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 //
このようなJCLで示されるプログラム(PROG1)があったとして、PROG1をCOBOLで作る場合、DD * で定義されたデータにどうやってアクセスすればいいのか?ということで検索されていたと考えます。
順次データセットとしてアクセスする
SYSINであろうがSYSOUTであろうが、プログラムからは順次データセットに見えますから、順次ファイルにアクセスする手順でプログラムを書くことできます。実際にどこに(例えば、DASDやTAPE上のデータセットなのか、JESのスプールなのか)書き出される、どこから読み込まれるかは、JCLのDD文で定義されます。
IDENTIFICATION DIVISION. PROGRAM-ID. PROG1. * ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT OUTFILE ASSIGN TO OUTLIST. SELECT INFILE ASSIGN TO DATAIN. * DATA DIVISION. FILE SECTION. FD OUTFILE RECORDING MODE F BLOCK 0 RECORD 132. 01 OUTDATA. 03 OUTAREA PIC X(132). FD INFILE RECORDING MODE F BLOCK 0 RECORD 80. 01 INDATA PIC X(80). * PROCEDURE DIVISION. OPEN INPUT INFILE, OUTPUT OUTFILE. LOOP. READ INFILE AT END CLOSE OUTFILE, INFILE STOP RUN. WRITE OUTDATA FROM INDATA. GO TO LOOP. * END PROGRAM PROG1.
ACCEPT、DISPLAY命令でアクセスする
DD名を言語が定めたものに合わせることができるなら、もっと簡単方法もあります。入力データのDD名を「SYSIN」にできるならACCEPT命令が使えます。この場合、プログラムでファイルをオープンしたりクローズする必要もありません。
IDENTIFICATION DIVISION. PROGRAM-ID. PROG1. * ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. * DATA DIVISION. WORKING-STORAGE SECTION. 01 INDATA PIC X(80). * PROCEDURE DIVISION. LOOP. MOVE '/*EOF*/' TO INDATA. デバイス側がEOF状態なら、 ACCEPT INDATA FROM SYSIN. INDATA領域の内容は変わらない。 IF INDATA = '/*EOF*/' THEN GO TO DONE. DISPLAY INDATA UPON SYSOUT. GO TO LOOP. * DONE. STOP RUN. * END PROGRAM PROG1.
//STEP1 EXEC PGM=PROG1 //SYSIN DD * ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 //
出力ならDISPLAY命令でSYSOUTに出力できます。SYSOUTへの出力の場合、JCLにSYSOUT DD文がなければLEがSYSOUTデータセットを割り振ります(z/OSの場合)。ACCEPTとDISPLAY命令による方法は簡単ですが、DD名は規定されてしまっています(SYSIN、SYSOUTなど、詳細はCOBOLのマニュアルを参照)。それ以外の名前のDD名にしたい場合は、順次ファイルとして定義してアクセスします。
Posted in キーワードから(何が知りたいですか) • • Top Of Page