3.18.7 bjexu_scopy(ファイルのレコード単位の複写)
(1) 機能
ファイルの複写,ファイルの内容をレコードの単位で操作しての複写,および入力ファイルを分割して複数のファイルに複写できる。ファイルを複写するとき,既にあるファイルを出力ファイルに指定しDD要素でDISP="MOD"を指定することで,追加書きができる。
(a) ファイルの複写
-
単純複写
入出力ファイルのファイル情報(ファイル形式,レコード長)が同一のとき,入力ファイルの内容をそのまま出力ファイルに複写する。
入力ファイルのファイル情報の指定がないときは,入力ファイルとして指定されたファイルの実際の形式に関係なく,入力ファイルの内容をそのまま出力ファイルに複写する。
-
形式変換
入力ファイルのファイル情報と異なるファイル情報を出力ファイルに指定した場合,ファイル形式を変換して複写する。
入力ファイルや出力ファイルには,PRESTファイルも指定できる。
ファイルを複写するときに指定できる入出力ファイル形式の組み合わせを次の表に示す。
入力ファイル形式 |
出力ファイル形式 |
||
---|---|---|---|
F |
V |
A |
|
F |
◎ |
◎ |
× |
V |
△ |
◎ |
× |
A |
× |
× |
○ |
- (凡例)
-
◎:指定できる組み合わせ。
○:指定できる組み合わせ。ただし,単純複写だけができ,形式変換はできない。
×:指定できない組み合わせ。
△:指定できない組み合わせ。ただし,RECORD文でレコードの編集を指定することで,指定できる組み合わせとなるが,入力レコードを超えないフィールド定義が必要である。詳細については,「(4) bjexu_scopy制御文」を参照のこと。
F:固定長順編成ファイル(COBOLで作成したファイルでファイルサイズがレコード長の整数倍であるバイナリファイル)。
V:可変長順編成ファイル(COBOLで作成したファイル)。
A:テキストファイル(COBOLまたはテキストエディタで作成したファイル)。改行コードでレコードが区切られる(UNIXとWindowsでは改行コードが異なる)。
-
入力ファイルの連結
複数のファイルをDD要素で連結して入力する。連結するファイルの属性は,同一でなければならない。ただし,コロン(:)は,連結されたデータセット名が環境変数に設定されるときの区切りとして使用しているため,ファイル名に使用できない。
入力ファイルのファイル情報の指定がないときは,可変長順編成ファイルを連結することはできない。可変長順編成ファイルを連結するには,入力ファイルのファイル形式を指定し,GENERATE文を指定する必要がある。
PRESTファイルは,連結できない。
-
入力レコードの連結
固定長順編成ファイルの複数のレコードを連結して,連結した複数のレコードを論理的な1入力レコードとして処理する。
-
出力ファイルへの追加書き
環境変数BJEX_SCOPY_DISP_MODの定義によって,MODとして処理するか,またはOLDとして処理するかを選択できる。環境変数でMODを選択したとき,DD要素でDISP="MOD"を指定すると,該当するファイルに対して追加書きができる。追加書きが有効なファイル種別などの詳細は,「3.4.2(1)(e) MODパラメータ」を参照。
環境変数BJEX_SCOPY_DISP_MODの設定値ごとの内容を次の表に示す。
表3‒42 環境変数BJEX_SCOPY_DISP_MODの設定と内容 環境変数BJEX_SCOPY_DISP_MODの設定
内容
MOD
MODとして処理する
OLD
OLDとして処理する
MODとOLD以外,または設定されていない
MODとして処理する
(b) ディレクトリにファイル作成
制御文で順編成の入力をグループに分割すると,各グループを1個のファイルにして,ディレクトリにファイルが作成される。
また,出力のディレクトリが既存のものであれば,これら各グループは追加のファイルとして,ディレクトリに新たに作成される。ただし,出力ディレクトリに同一ファイル名がある場合には,そのファイルは作成されない。
レコードのフィールドと,そのフィールド内の文字の並びを指定することでグループが分割され,指定した文字の並びをレコード内に見つけると,そこまでのレコードをグループとして1個のファイルが作成される。この順編成の入力を分割してできた1つのグループをレコードグループと呼ぶ。
(c) レコードの編集
入力ファイルの各レコードの指定したフィールドを編集して,出力ファイルのレコードを作成する。指定した文字の並びをレコード内に見つけると,そこまでのレコードをレコードグループとして,1個のファイルが作成される。レコードグループの指定は,ディレクトリにファイルを作成する場合と同じである。
レコード編集できるのは,固定長順編成ファイルと可変長順編成ファイルである。テキストファイルはレコード編集できない。
レコードの編集には,次の方法がある。
(1)入力レコードの指定位置から指定した長さのフィールド(内の情報)を,出力レコードの指定位置へ移す。
- (2)入力レコードの指定位置から指定した長さのフィールド(内の情報)を変換して,出力レコードの指定位置へ移す。変換には次の2とおりがある。
-
-
PZ変換
入力フィールドのデータを内部10進形式と見なし,外部10進形式に変換する。このとき,入力フィールドの長さをLとすると,出力フィールド長は,出力長の指定がなければ2L-1となる。なお,入力データの妥当性はチェックしない。
-
ZP変換
入力フィールドのデータを外部10進形式と見なし,内部10進形式に変換する。このとき,入力フィールドの長さをLとすると,出力フィールド長は,出力長の指定がなければ(L+2)/2を超えない最大の整数となる。なお,入力データの妥当性はチェックしない。
-
(3)出力レコードの指定位置から指定の文字列を埋め込む。
(4)未編集フィールドへ埋め込み文字をセットする。未編集フィールド(出力レコード上で編集が指定されなかった部分)には,空白または制御文での指定文字を埋め込む。
(2) 入出力構成
bjexu_scopyの入出力構成を次の図に示す。
(a) 入力
-
入力ファイル
複写の入力となる,複写元のファイル。
PRESTファイルやダミーファイルも指定できる。
-
制御文(SYSIN)
bjexu_scopyの処理内容を指定する。制御文には次のものがある。
-
GENERATE文
-
RECORD文
-
MEMBER文
-
INPFILE文
-
OUTFILE文
-
(b) 出力
-
出力ファイル
複写の出力となる,複写先のファイル。
PRESTファイルやダミーファイルも指定できる。
-
メッセージ(SYSPRINT)
bjexu_scopyが出力するメッセージの出力先。
(c) 終了コード
bjexu_scopyの終了コードを次の表に示す。
終了コード |
意味 |
---|---|
0 |
正常に処理を終了した。 |
4 |
エラーが発生したが無視して続行した。詳細については,出力されたメッセージを参照のこと。※ |
12 |
次に示すような回復できないエラーが発生したため,処理を打ち切り,ジョブステップを終了する。文法解析終了後の複写処理中にエラーが発生した場合,出力ファイルの内容は保証されない。
|
注※ 文法的に正しいが,要求された処理を実行できなかった場合,またはSYSPRINTでオープンエラーが発生した場合の終了コードは4になる。
(3) ジョブ定義XMLファイル
bjexu_scopyを実行する場合は,次に示すEXEC要素とDD要素の指定が必要である。
(a) EXEC要素
EXEC要素のPGMにbjexu_scopyを指定する。
<EXEC PGM="bjexu_scopy" />
(b) SYSPRINTのDD要素
bjexu_scopyが発行するメッセージの出力先を指定する。なお,DD連結指定はできない。出力先には,SYSOUTデータファイルや恒久ファイルを指定できる。
SYSPRINTが使用できない状態の場合,経過メッセージは出力されない。出力メッセージの詳細については,「10. メッセージと終了コード」を参照のこと。
(c) SYSUT1のDD要素
複写元となる入力ファイルを指定する。
複数のファイルを連結して指定できる。このとき,各ファイルの属性は一致していなければならない。なお,ファイルの属性が一致しているかのチェックは行わない。固定長順編成ファイルの場合,指定されたレコード長で処理し,最終レコードの長さが不一致のときは,終了コードが12で終了する。
PRESTファイルは,連結できない。
レコード数が0件のファイルを指定してもエラーにはならないで,終了コード0で終了する。
(d) SYSUT2のDD要素
複写先となる出力ファイルを指定する。また,複数のファイルに分割して出力するときは,複写先となる出力ディレクトリを指定し,ファイル名をMEMBER文で指定する。ディレクトリを指定し,MEMBER文で指定しないとエラーになる。なお,DD連結指定はできない。
(e) SYSINのDD要素
bjexu_scopy制御文を指定する。または,この制御文が記述されたファイルのパスを指定する。DD連結指定はできない。
(4) bjexu_scopy制御文
bjexu_scopy制御文と機能を次の表に示す。
制御文名 |
機能 |
---|---|
INPFILE文 |
入力ファイルのファイル形式を指定する。 |
OUTFILE文 |
出力ファイルのファイル形式を指定する。 |
GENERATE文 |
ファイルの複写,編集の開始を指定する。 |
MEMBER文 |
ファイルを指定する。 |
RECORD文 |
グループに分割するための識別文字とレコード編集の情報を指定する。 |
bjexu_scopy制御文に指定できる組み合わせと処理内容の対応を次の表に示す。
制御文 |
入力ファイル形式 |
処理内容 |
|||||||
---|---|---|---|---|---|---|---|---|---|
INPFILE |
OUTFILE |
GENERATE |
MEMBER |
RECORD |
F |
V |
A |
||
LENGTHあり |
LENGTHなし |
||||||||
× |
× |
× |
× |
× |
× |
指定できる |
指定できる |
指定できる |
単純複写 |
× |
× |
× |
○ |
× |
× |
指定できる |
指定できる |
指定できる |
単純複写 |
○ |
○※1 |
× |
× |
× |
× |
指定できる |
指定できる |
指定できる |
形式変換/単純複写※2 |
○ |
○※3 |
○※4 |
− |
× |
× |
指定できる |
指定できない |
指定できない |
形式変換 |
○ |
○※1 |
− |
○ |
× |
× |
指定できる |
指定できる |
指定できる |
形式変換/単純複写※2 |
○ |
○※3 |
○※4 |
− |
○ |
○※5 |
指定できる |
指定できない |
指定できない |
ディレクトリにファイル作成 |
○ |
○※1 |
− |
○ |
○ |
○※5 |
指定できる |
指定できる |
指定できない |
ディレクトリにファイル作成 |
○ |
○※3 |
○※4 |
− |
× |
○ |
指定できる |
指定できない |
指定できない |
レコード編集 |
○ |
○※1 |
− |
○ |
× |
○ |
指定できる |
指定できる |
指定できない |
レコード編集 |
- (凡例)
-
○:指定あり。
×:指定なし。
−:同時指定できない。
F:固定長順編成ファイル。
V:可変長順編成ファイル。
A:テキストファイル。
- 注※1
-
省略できる。INPFILE文の指定値を仮定する。
- 注※2
-
次のどちらかに該当するとき,単純複写になる。ただし,入力ファイルが可変長順編成ファイルでDD連結されている場合を除く。
-
INPFILE文とOUTFILE文の指定が同じ。
-
OUTFILE文でレコード長の指定を省略,またはOUTFILE文の指定を省略。
-
- 注※3
-
省略できる。GENERATE文のLENGTHオペランドの指定値を仮定する。
- 注※4
-
INPFILEが固定長順編成ファイルのとき,GENERATE文のLENGTHオペランドを指定できる。可変長順編成ファイルやテキストファイルのときは指定しないこと。
- 注※5
-
省略できる。
(a) INPFILE文
■ 形式
[記号] △1 INPFILE △1 |
FILEORG=ファイル形式[,RECLEN=レコード長][,RECCOUNT][,CHKEMPTY] |
■ オペランド
- FILEORG=ファイル形式
-
bjexu_scopy制御文の入力ファイルのファイル形式を指定する。
-
ファイル形式〜((F|V|A))
F:固定長順編成ファイル(COBOLで作成したファイル,ファイルサイズがレコード長の整数倍であるバイナリファイル)であることを示す。
V:可変長順編成ファイル(COBOLで作成したファイル)であることを示す。
A:テキストファイル(COBOLまたはテキストエディタで作成したファイル)であることを示す。テキストファイルの各行(テキストレコード)は,改行文字(X'0A')で区切られている。
-
- RECLEN=レコード長
-
bjexu_scopy制御文の入力ファイルのレコード長を指定する。
-
レコード長 〜<符号なし整数>((1〜65535))
レコード長を指定する。FILEORG=Fを指定した場合は,必ず指定する必要がある。その他の形式のときは指定しないこと。指定した場合はエラーとなる。
-
- RECCOUNT
-
単純複写時,ファイルのレコードサイズに基づいたレコード数をKAKD2138-Iメッセージに表示することを指定する。省略時は,レコード長が65535バイトのレコードを出力したときのレコード数を表示する。
固定長順編成ファイルの場合,FILEORG=FとRECLENオペランドとともに指定する必要がある。
可変長順編成ファイルを単純複写する場合,レコード単位に入出力を行うので,RECCOUNTオペランド指定がない単純複写と比較して性能が低下する。
入力ファイルがテキストファイルのときは,指定できない。指定すると,エラーとなる。
- CHKEMPTY
-
入力が可変長順編成ファイルのとき,レコード数が0件のファイルであればエラーにすることを指定する。省略すると,入力ファイルのレコード数が0件であってもエラーにしないで,レコード数が0件の出力ファイルを作成する。
入力ファイルが可変長順編成ファイル以外のときは,指定できない。指定すると,エラーとなる。単純複写のときは,指定しても無効で,エラーにならない。
■ 注意事項
-
制御文の先頭に指定すること。
-
ほかの制御文が1つも指定されていないとき,およびLENGTHオペランド指定なしのGENERATE文だけを指定したときは省略できる。その他の場合は省略できない。
-
すべての制御文が省略されたとき,およびLENGTHオペランド指定なしのGENERATE文だけを指定したときは,入力ファイルの実際の形式に関係なく,入力ファイルをそのまま出力ファイルに複写する。可変長順編成ファイルをDD連結するときは,INPFILE文でFILEORG=Vを指定する必要がある。
(b) OUTFILE文
■ 形式
[記号] △1 OUTFILE △1 |
FILEORG=ファイル形式[,RECLEN=レコード長][,MINLEN=最小レコード長] |
■ オペランド
- FILEORG=ファイル形式
-
bjexu_scopy制御文の出力ファイルのファイル形式を指定する。
-
ファイル形式〜((F|V|A))
F:固定長順編成ファイル(COBOLで作成したファイル,ファイルサイズがレコード長の整数倍であるバイナリファイル)であることを示す。
V:可変長順編成ファイル(COBOLで作成したファイル)であることを示す。
A:テキストファイル(COBOLまたはテキストエディタで作成したファイル)であることを示す。テキストファイルの各行(テキストレコード)は,改行文字(X'0A')で区切られている。
-
- RECLEN=レコード長
-
bjexu_scopy制御文の出力ファイルのレコード長を指定する。
-
レコード長 〜<符号なし整数>((1〜65535))
レコード長を指定する。可変長順編成ファイルの場合は最大レコード長を指定する。テキストファイルの場合は指定しないこと。指定した場合はエラーとなる。
- 出力が固定長順編成ファイルの場合
-
-
RECLENオペランドの指定値が出力ファイルのレコード長になる。
単純複写を除く複写や編集時に,RECLENオペランドを省略した場合,次のように仮定する。
・入力が可変長順編成ファイルのときは,FIELD編集の結果のレコードの長さがレコード長になる。
・入力が固定長順編成ファイルのときは,環境変数BJEX_SCOPY_FIXRECLENの定義によって出力レコード長の求め方を選択できる。指定値ごとの出力レコード長を決める優先順位を次の表に示す。
表3‒46 出力レコード長の決定方法 環境変数BJEX_SCOPY_FIXRECLENの設定
出力レコード長の優先順位
FIELD
GENERATE
INPFILE
FIELD
1
2
3
NOFIELD
−
1
2
FIELDとNOFIELD以外,または設定されていない
1
2
3
-
RECORD文のFIELDオペランドで編集した結果の長さが出力レコード長を超えるとエラーになる。
-
RECORD文やRECORD文のFIELDオペランドの指定がない場合,入力レコード長が出力レコード長と一致しないときは,次に示す処理となる。
「入力レコード長>出力レコード長」の場合,後ろを切り捨てる。
「入力レコード長<出力レコード長」の場合,残りはRECORD文のFILLオペランドで指定した文字を埋め込む。FILLオペランドの指定を省略した場合は空白(X'20')を埋め込む。
-
- 出力が可変長順編成ファイルの場合
-
-
単純複写を除く複写や編集処理でRECLENオペランド省略時は,最大レコード長に65535を仮定する。
-
出力ファイルの最大レコード長を超える編集はエラーになる。次に示す処理となる。
「入力または編集結果のレコード長>出力ファイルの最大レコード長」の場合はエラーとなる。
「入力または編集結果のレコード長≦出力ファイルの最大レコード長」の場合,入力または編集結果のレコード長の長さで出力する。
-
-
- MINLEN=最小レコード長
-
出力ファイルが可変長順編成ファイルのとき,最小レコード長を指定する。このオペランドを指定すると,最小レコード長より短いレコードを出力しようとしたときにエラーになるので,必要な情報が含まれていることをチェックできる。
固定長順編成ファイルやテキストファイルの場合は指定しないこと。指定した場合はエラーとなる。
-
最小レコード長 〜<符号なし整数>((1〜65535))
単純複写を除く複写や編集処理でMINLENオペランド省略時は,最小レコード長に1を仮定する。
出力ファイルの最小レコード長に満たない編集はエラーとなる。
-
■ 注意事項
-
INPFILE文の次に指定すること。
-
RECLENおよびMINLENオペランドを指定するときは,「最大レコード長≧最小レコード長」になるように指定する。指定に誤りがあると,エラーとなる。
(c) GENERATE文
■ 形式
[記号] △1 GENERATE △1 |
[LENGTH=入力論理レコード長] |
■ オペランド
- LENGTH=入力論理レコード長
-
-
入力論理レコード長 〜<符号なし整数>((1〜65535))
固定長順編成ファイルのレコードを連結,または切り捨てるときに指定する。
入力論理レコード長を指定する。このオペランドで,入力ファイルのレコード長をオペランドで指定した入力論理レコード長に変更し,複数の入力レコードを連結して処理できる。
入力論理レコードは,複写や編集のための新たな入力レコードになり,その編集結果が出力レコードになる。
このオペランドを指定した場合,次の手順でレコード連結される。
1. 指定した入力論理レコード長に達するまで,複数の入力レコードを連結する。
2. 入力論理レコード長が入力レコード長の倍数でない場合,連結後の端数部分を切り捨てる。
3. 連結後の入力レコードの長さが入力論理レコード長に達しない場合,出力しない。
4. 上記の手順で連結したレコードを1つの入力論理レコードとして処理する。したがって,レコードを編集する場合,入力位置は連結後の入力論理レコードに対するものを指定する。
-
このオペランドは,入力ファイル形式が固定長順編成ファイルのときだけ指定できる。省略した場合はレコードを連結しない。
このオペランドを指定して出力ファイルのレコード長を省略した場合,出力ファイルのレコード長にこのオペランドで指定した値が仮定される。なお,可変長順編成ファイルおよびテキストファイルにこのオペランドを指定した場合はエラーとなる。
このオペランドを使用した例を次に示す。
■ 注意事項
-
INPFILE文とOUTFILE文の次に記述すること。
-
GENERATE文は1行だけ指定できる。1つのステップ内に2行以上記述するとエラーになる。
(d) MEMBER文
■ 形式
[記号] △1 MEMBER △1 |
NAME=(ファイル名) |
■ オペランド
- NAME=(ファイル名) 〜<引用文字列または特殊文字列>
-
作成するファイル名を指定する。SYSUT2の指定がディレクトリの場合に指定できる。
この制御文に続き,RECORD文でレコードグループを指定する。1つのMEMBER文に対して複数個のRECORD文を指定できる。RECORD文がなければ,入力ファイルの終わりまでが1つのファイルとして,このオペランドで指定したファイル名が与えられる。
ファイル名には,パス名の区切りを示す文字(/:スラント)を指定できない。
■ 注意事項
-
出力がディレクトリでない場合,オープンエラーになる。
-
複数のMEMBER文を指定するときは,RECORD文のIDENTオペランドでレコードグループを指定する必要がある。MEMBER文を1つだけ指定したとき,および複数のMEMBER文を指定したときの最後のRECORD文のIDENTオペランドは省略できる。IDENTオペランドを省略すると,ファイルの終わりまでが同一のレコードグループとして扱われる。
-
MEMBER文を1つだけ指定するときは,RECORD文を省略できる。また,複数のMEMBER文を指定するとき,最後のMEMBER文に対するRECORD文は省略できる。RECORD文を省略すると,ファイルの終わりまでが同一のレコードグループとして扱われる。
-
先頭のMEMBER文の前にRECORD文を指定した場合,エラーになる。
-
MEMBER文で指定したファイルがすでに存在するときは,エラーになる。
(e) RECORD文
■ 形式
[記号] △1 RECORD △1 |
[IDENT=(文字列長,最終レコード情報,入力位置)] [,FIELD=([フィールド長],[入力位置|フィールド情報],[PZ|ZP] ,[出力位置][,出力長])]… [,FILL=埋め込み文字| X'埋め込み文字' ] |
■ オペランド
- IDENT=(文字列長,最終レコード情報,入力位置)
-
順編成の入力をレコードグループに分割するとき,レコードグループの最終レコードを識別する情報を指定する。
-
文字列長 〜<符号なし整数>((1〜8))
最終レコード情報の文字列長を示す。
-
最終レコード情報 〜<引用文字列>((1〜8バイト))
最終レコードを識別する文字列を指定する。文字列長サブオペランド値を指定した場合,このオペランドに指定した文字列(先頭と末尾の引用符は除く)の長さは,文字列長サブオペランド値と一致しなければならない。
-
入力位置 〜<符号なし整数>((1〜65535))
レコードの先頭からの位置を指定する。GENERATE文でLENGTHオペランドを指定しているときは,入力論理レコードの先頭からの位置を指定する。
レコードの指定された入力位置から指定された長さが,最終レコードの情報で示された文字列と一致すれば,それが最終レコードとなる。
複数のRECORD文を連続して指定できる。複数のRECORD文を指定するときは,IDENTオペランドでレコードグループを指定する必要がある。最後のRECORD文だけは,IDENTオペランドを省略できる。
IDENTオペランドを省略すると,ファイルの終わりまでが同一のグループとして扱われる。
-
- FIELD=([フィールド長],[入力位置|フィールド情報],[PZ|ZP],[出力位置][,出力長])
-
レコードの編集方法を指定する。1つのRECORD文に複数指定できる。
出力ファイルが可変長順編成ファイルのとき,編集してできたレコードの長さがレコード長になる。
入力レコードまたは入力論理レコードの内容を編集しないで出力レコードの先頭に複写するときは,FIELDオペランドを省略できる。それ以外のときは,FIELDオペランドで編集方法を指定する必要がある。
FIELDオペランドを省略したとき,環境変数BJEX_SCOPY_NOFIELD_TRUNCの定義によって複写する入力レコードを80バイトに切り詰めるかどうかを選択できる。指定値ごとの動作を次の表に示す。
表3‒47 環境変数BJEX_SCOPY_ NOFIELD_TRUNCの設定ごとの制限 環境変数BJEX_SCOPY_ NOFIELD_TRUNCの設定
出力レコード長
YES
80バイトに切り詰める
NO
80バイトに切り詰めない
YESとNO以外,または設定されていない
80バイトに切り詰めない
-
フィールド長 〜<符号なし整数>《80》((1〜65535))
入力フィールドの長さを示す。複写の場合は,出力フィールドの長さに一致する。変換の場合には,出力フィールドの長さが変化する。
出力位置からレコード長の最後までの長さが指定できる最大値になる。
-
入力位置 〜<符号なし整数>《1》((1〜65535))
入力フィールドの位置を入力レコードの先頭からのバイト数で示す(レコードの先頭を1とする)。
GENERATE文でLENGTHオペランドを指定しているときは,入力論理レコードの先頭からの位置を指定する。
-
フィールド情報 〜<引用文字列>((1〜40バイト))
文字列を埋め込む場合,埋め込む文字列をアポストロフィで囲んで指定する。最大で40バイト指定できる。
-
- PZ|ZP
-
PZを指定した場合,入力フィールドのデータを内部10進形式とし,外部10進形式に変換する。
ZPを指定した場合,外部10進形式から内部10進形式に変換する。
PZもZPも指定しなかった場合,入力フィールドのデータは文字列となり,変換しないで転送する。
変換での妥当性はチェックしない。あらかじめ正しい形式のデータを設定しておく必要がある。
変換後の内部10進形式の符号(最終バイト下位4ビット)は,正の場合(1100)2,負の場合は(1101)2とする。変換元内部10進数の最終バイト下位4ビットが(1101)2の場合は負とし,(1101)2以外であれば正となる。
外部10進形式の符号位置は,最終バイト上位4ビットとする。変換後は正の場合は3,負の場合は7とする。変換前の外部10進数の最終バイト上位4ビットが7の場合は負とし,7以外であれば正となる。外部10進形式のゾーン部(各バイトの上位4ビット)は3とする。
- 外部10進数は次に示す形式とする。
-
ゾーン部には3の値を,数字部には0〜9の値を指定する。
また,符号部は次に示す値のどちらかを指定する。
3:正
7:負
- 内部10進数は次に示す形式とする。
-
数字部には0〜9の値を指定する。
また,符号部には次に示す値のどれかを指定する。
(1100)2:正
(1101)2:負
(1111)2:絶対値(変換した結果がこの値になることはない)
- 出力位置 〜<符号なし整数>《1》((1〜65535))
-
編集後のデータの出力フィールドの開始位置を示す(レコードの先頭を1とする)。
FIELDオペランドの指定順に処理する。直前の結果と重なったときは,上書きされる。
- 出力長 〜<符号なし整数>《80》((1〜65535))
-
入力フィールドのデータ変換(PZ,ZP変換)を指定した場合,出力フィールドの長さを指定する。
この指定を省略すると,次の値が仮定される。なお,「↓(数値)↓」は小数点切り捨てを表す。
PZ変換の時:入力フィールド長×2−1
ZP変換の時:↓(入力フィールド長+2)÷2↓
出力長が上記の値より短い場合,変換後のフィールドの右端から指定した長さのフィールドが出力される。
出力長が上記の値より長い場合,PZ変換のときは(30)16が,ZP変換のときは(00)16が左端から埋め込まれる。
データ変換しない場合,出力長を指定しても無視される。
PZ変換とZP変換時の入力フィールドと出力フィールドの関連を次に示す。なお,フィールド内の数値は16進数で記述している。
- FILL=埋め込み文字|X'埋め込み文字'
-
-
埋め込み文字 〜<引用文字列>《空白》((1文字))
-
X'埋め込み文字' 〜<16進数字>《20》((2文字))
未編集フィールドに埋め込む文字を指定する。Xを指定した場合には16進数字で指定する。
-
■ 注意事項
-
IDENTオペランドは,RECORD文に複数指定されたとき,最後の指定を有効にする。
-
FILLオペランドは,RECORD文に複数指定されたとき,最後の指定を有効にする。
-
入力位置とフィールド長は,入力レコードまたは入力論理レコード外を指定すると,エラーになる。
-
フィールド長,出力位置,および出力長は,編集の結果が出力レコード長を超えない値を指定すること。出力ファイルが固定長順編成ファイルの場合,OUTFILE文のRECLENオペランドで出力レコード長を指定したとき,FIELDオペランドの指定がレコード長を超える指定はエラーになる。
RECLENオペランドの指定がないときは,環境変数BJEX_SCOPY_FIXRECLENの定義によって出力レコード長の求め方を選択できる。詳細については,「3.18.7(4)(b) OUTFILE文」を参照のこと。
出力ファイルが可変長順編成ファイルのとき,出力ファイルの最大レコード長を超える編集はエラーになる。
-
入力レコードに有効なデータがない場合,空(ゼロバイト)のファイルができることがある。入力ファイルや編集結果のレコードがゼロバイトの場合などが該当する。
(5) 使用例
- <例1>入力の固定長順編成ファイルを出力ファイルに単純複写する。
-
図3‒42 入力の固定長順編成ファイルを出力ファイルに単純複写
(1)bjexu_scopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ファイルを定義する。ファイルは,"file1"を指定する。
(4)出力ファイルを定義する。ファイルは,"file2"を指定する。
(5)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(6)入力ファイルの形式を指定する。入力ファイルは,固定長順編成ファイルでレコード長が80バイトであることを指定する。OUTFILE文の指定を省略した場合,INPFILE文で指定した形式を仮定する。
- <例2>入力の固定長順編成ファイルをレコード編集して出力ファイルに複写する。
-
図3‒43 入力の固定長順編成ファイルをレコード編集して出力ファイルに複写
(1)bjexu_scopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ファイルを定義する。ファイルは,"file1"を指定する。
(4)出力ファイルを定義する。ファイルは,"file2"を指定する。
(5)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(6)入力ファイルの形式を指定する。入力ファイルのレコード長は,120バイトであることを指定する。
(7)出力ファイルの形式を指定する。出力ファイルのレコード長を80バイトにすることを指定する。
(8)ファイルの複写と編集の開始を指定する。入力レコードを連結しないで入力論理レコードにする。
- (9)最初のレコードグループの編集内容を指定する。
-
(a)IDENTオペランドで,最初のレコードグループに分割する最後のレコードの識別情報を指定する。レコードの1〜8バイトの内容が'FIRSTEND'のレコードを示す。
(b)入力レコードの20バイト目からの31バイトを出力レコードの1バイト目以降へ変換しないで転送する。
(c)入力レコードの100バイト目からの内部10進形式データ15バイトを外部10進形式データに変換して出力レコードの32バイト目以降へ転送する。
(d)FILLオペランドで,未編集領域に埋め込み文字として"*"を埋め込むことを指定する。
- (10)第2レコードグループ(残りのレコード)の編集内容を指定する。
-
(a)入力レコードの1バイト目からの内部10進形式データ20バイトを外部10進形式データに変換して出力レコードの1バイト目以降へ転送する。
(b)入力レコードの80バイト目からの41バイトを出力レコードの40バイト目以降へ転送する。
(c)IDENTオペランドを指定しないで,入力ファイルの最後まで処理することを指定する。
- <例3>入力の固定長順編成ファイルをレコード編集してレコードグループ単位に出力ファイルを作成する。
-
図3‒44 入力の固定長順編成ファイルをレコード編集してレコードグループ単位に出力ファイルを作成
(1)bjexu_scopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ファイルを定義する。ファイルは,"file0"を指定する。
(4)出力ディレクトリを定義する。ディレクトリは,"files"を指定する。
(5)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(6)入力ファイルの形式を指定する。入力ファイルのレコード長は,80バイトであることを指定する。
(7)出力ファイルの形式を指定する。出力ファイルのレコード長は,80バイトであることを指定する。
(8)ファイルの複写と編集の開始を指定する。入力論理レコード長は,80バイトであることを指定する。
(9)最初のレコードグループに付けるファイル名file1を指定する。
(10)最初のレコードグループの最後のレコードを指定する。レコードの1バイト目から8バイトの内容が'FIRSTGRP'のレコードを示す。
(11)第2レコードグループに付けるファイル名file2を指定する。
(12)第2レコードグループの最後のレコードを指定する。レコードの1バイト目から8バイトの内容が'SECNDGRP'のレコードを示す。
(13)第3レコードグループに付けるファイル名file3を指定する。
(14)第3レコードグループの最後のレコードを指定する。レコードの1バイト目から8バイトの内容が'THIRDGRP'のレコードを示す。
(15)第4レコードグループに付けるファイル名file4を指定する。RECORD文を省略し,入力ファイルの最後までを第4レコードグループとして出力することを指定する。
- <例4>入力の可変長順編成ファイルをレコード編集して出力ファイルに複写する。
-
図3‒45 入力の可変長順編成ファイルをレコード編集して出力ファイルに複写
(1)bjexu_scopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ファイルを定義する。ファイルは,"file1"を指定する。
(4)出力ファイルを定義する。ファイルは,"file2"を指定する。
(5)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(6)入力ファイルの形式を指定する。入力ファイルは,可変長順編成ファイルであることを指定する。
(7)出力ファイルの形式を指定する。出力ファイルは,可変長順編成ファイルで,最大レコード長を256バイトにすることを指定する。
(8)ファイルの複写と編集の開始を指定する。
- (9)レコードグループの編集内容を指定する。
-
(a)入力レコードの1バイト目からの内部10進形式データ20バイトを外部10進形式データに変換し,出力レコードの1バイト目以降へ転送する。
(b)入力レコードの61バイト目からの20バイトを出力レコードの61バイト目以降へ変換しないで転送する。
(c)FILLオペランドで,未編集領域に埋め込み文字として"+"を埋め込むことを指定する。
- <例5>入力の固定長順編成ファイルを可変長順編成ファイルに形式変換して複写する。
-
図3‒46 入力の固定長順編成ファイルを可変長順編成ファイルに形式変換して複写
(1)bjexu_scopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ファイルを定義する。ファイルは,"file1"を指定する。
(4)出力ファイルを定義する。ファイルは,"file2"を指定する。
(5)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(6)入力ファイルの形式を指定する。入力ファイルは,固定長順編成ファイルでレコード長が80バイトであることを指定する。
(7)出力ファイルの形式を指定する。出力ファイルは,可変長順編成ファイルで,最大レコード長を80バイトにすることを指定する。
(8)ファイルの複写と編集の開始を指定する。
- <例6>入力の可変長順編成ファイルを固定長順編成ファイルに形式変換して複写する。
-
図3‒47 入力の可変長順編成ファイルを固定長順編成ファイルに形式変換して複写
(1)bjexu_scopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ファイルを定義する。ファイルは,"file1"を指定する。
(4)出力ファイルを定義する。ファイルは,"file2"を指定する。
(5)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(6)入力ファイルの形式を指定する。入力ファイルは,可変長順編成ファイルであることを指定する。
(7)出力ファイルの形式を指定する。出力ファイルは,固定長順編成ファイルで,レコード長を80バイトにすることを指定する。
(8)ファイルの複写と編集の開始を指定する。
(9)入力レコードの1バイト目からの80バイトを出力レコードの1バイト目以降へ変換しないで転送する。
- <例7>入力の固定長順編成ファイルを出力ファイルに追加書きで単純複写する。
-
図3‒48 入力の固定長順編成ファイルを出力ファイルに追加書きで単純複写
(1)bjexu_scopyを実行する。
(2)メッセージ出力先にSYSOUTデータファイルのAクラスを指定する。
(3)入力ファイルを定義する。ファイルは,"file1"を指定する。
(4)出力ファイルを定義する。ファイルは,"file2"を指定する。追加書きするためにDISP="MOD"を指定する。
(5)制御文の入力元を定義する。DD要素の中に入力データがあることを指定する。
(6)入力ファイルの形式を指定する。入力ファイルは,固定長順編成ファイルでレコード長が80バイトであることを指定する。OUTFILE文の指定を省略した場合,INPFILE文で指定した形式を仮定する。