3.10.3 SYSINデータを順編成固定長ファイルとしてプログラムに渡す方法
SYSINデータは,改行で区切られたテキスト編成ファイルとしてプログラムに渡される。しかし,VOS3から移行したCOBOLプログラムなど,プログラムがSYSINデータを順編成固定長ファイルとして扱っている場合,プログラムが正しく動作しない。
SYSINデータを順編成固定長ファイルとしてプログラムに渡すには,ジョブ定義XMLファイルのSYSINデータを指定するDD要素に,SAMF="YES"を指定する。この場合,バッチジョブ実行システムはSYSINデータをレコード長80バイトの順編成ファイルに変換し,プログラムに渡す。DD要素にSAMF="YES"を指定した場合,レコード中に改行を含めることはできない。
SYSINデータの変換規則を次に示す。
-
「1行のバイト数が80バイト+改行コード」の場合,改行を削除する。
-
「1行のバイト数が80バイト未満+改行コード」の場合,改行を削除し,1行が80バイトになるよう末尾に半角空白を挿入する。
-
「1行のバイト数が80バイトより大きい+改行コード」の場合,81バイト目以降に空白以外の文字があれば,ジョブ定義XMLファイルの解析時にエラーとなり,ジョブを実行しないで終了する。「81バイト目以降が1つ以上の空白+改行」の場合,それらを削除する。
-
最後の行が改行で終わっていない場合,半角空白だけを挿入する。
指定例を次に示す。
-
プログラムがSYSINデータをテキスト編成ファイルとして扱う場合
- ジョブ定義XMLファイル
<DD TYPE="DATA" SAMF="NO"> <![CDATA[ ! AAAAAAAAAA…AAAAAAAAAAAAAAAAAAAA\n ←80バイト+改行 BBBBBBBBBB…BBBBBBBBBB\n ←70バイト+改行 ! ]]> </DD>
(凡例)
¥n:改行を示す。
- レコード
レコード1 AAAAAAAAAA…AAAAAAAAAAAAAAAAAAAA\n ←80バイト+改行 レコード2 BBBBBBBBBB…BBBBBBBBBB\n ←70バイト+改行
(凡例)
¥n:改行を示す。
- COBOLプログラムに渡されるSYSINデータの内容
AAAAAAAAAA…AAAAAAAAAAAAAAAAAAAA\n BBBBBBBBBB…BBBBBBBBBB\n [EOF]
(凡例)
¥n:改行を示す。
[EOF]:ファイルの終わりを示す。
-
プログラムがSYSINデータを順編成固定長ファイルとして扱う場合
- ジョブ定義XMLファイル
<DD TYPE="DATA" SAMF="YES"> <![CDATA[ ! AAAAAAAAAA…AAAAAAAAAAAAAAAAAAAA\n ←80バイト+改行 BBBBBBBBBB…BBBBBBBBBB\n ←70バイト+改行 ! ]]> </DD>
(凡例)
¥n:改行を示す。
- レコード
レコード1 AAAAAAAAAA…AAAAAAAAAAAAAAAAAAAA ←80バイト※1 レコード2 BBBBBBBBBB…BBBBBBBBBB^^^^^^^^^^ ←80バイト※2
(凡例)
^:半角空白を示す。
注※1 改行を削除。
注※2 半角空白10バイト挿入,改行を削除。
- COBOLプログラムに渡されるSYSINデータの内容
AAAAAAAAAA…AAAAAAAAAAAAAAAAAAAABBBBBBBBBB…BBBBBBBBBB^^^^^^^^^^[EOF]
(凡例)
^:半角空白を示す。
[EOF]:ファイルの終わりを示す。
この機能を使用する場合の注意事項を次に示す。
-
DD要素にSAMF属性を指定する場合は,TYPE属性値に"DATA"が指定されていて,かつ同一ジョブステップのEXEC要素のLANG属性値に"COBOL"が指定されている必要がある。それ以外の場合は,ジョブ定義XMLファイルの解析時にエラーとなり,ジョブを実行しないで終了する。
-
DD要素のSAMF属性に"YES"を指定した場合は,改行を含むSYSINデータをCOBOLプログラムに渡すことはできない。