6.7.5 レコード末尾の空白文字を出力する機能
レコード末尾の空白文字を出力する設定をしておくと,テキスト編成ファイルに対するWRITE文,およびREWRITE文でレコード末尾に半角空白文字(X'20')があった場合に,半角空白文字を削除しないで,そのままファイルに書き出せます。
レコード末尾の空白文字を出力する機能を使用するには,実行時環境変数CBLD_ファイル名にTEXTWRITESPACEを指定するか,実行時環境変数CBLTEXTWRITESPACEにYESを指定してください。
(1) ファイル単位に指定する方法
- 形式
CBLD_ファイル名={ TEXTWRITESPACE | NOTEXTWRITESPACE }
- 機能
-
-
環境変数CBLD_ファイル名にTEXTWRITESPACEを指定すると,実行単位中の任意のテキスト編成ファイルに対して,WRITE文およびREWRITE文でレコード末尾の連続する半角空白文字をファイルに書き出します。
-
環境変数CBLD_ファイル名にNOTEXTWRITESPACEを指定すると,この機能は無効になります。
-
(2) 実行単位中のすべてのファイルに指定する方法
- 形式
CBLTEXTWRITESPACE=YES
- 機能
-
-
環境変数CBLTEXTWRITESPACEにYESを指定した場合は,実行単位中のすべてのテキスト編成ファイルに対するWRITE文およびREWRITE文でレコード末尾からの連続する半角空白文字をファイルに書き出します。
-
環境変数CBLTEXTWRITESPACEにYESの指定がないか,またはYES以外を指定した場合は,この機能は無効になります。
-
(3) 規則
-
この機能を使用した場合,WRITE文やREWRITE文で書き出すレコードの長さは次のようになります。
固定長形式の場合:ファイル節に定義したレコード長
可変長形式の場合:WRITE文やREWRITE文実行時に指定されたレコード長
-
ファイル単位に指定する方法と実行単位中のすべてのファイルに指定する方法を併用した場合,ファイル単位に指定する方法での指定が優先されます。次に指定の組み合わせによる機能の有効・無効状態を示します。
表6‒3 環境変数CBLTEXTWRITESPACEと環境変数CBLD_ファイル名の指定の組み合わせ CBLTEXTWRITESPACE
CBLD_ファイル名
TEXTWRITESPACE
NOTEXTWRITESPACE
指定なし
YES
有効
無効
有効
環境変数指定なし
または
YES以外
有効
無効
無効
(4) 注意事項
-
WRITE文のADVANCING指定,またはPOSITIONING指定で書き出された改行文字に対しては,この機能を使用しても改行文字の前に半角空白文字は出力されません。半角空白文字を含んで改行文字を書き出したいときは,ADVANCING指定やPOSITIONING指定がないWRITE文で半角空白文字だけのレコードを書き出してください。
-
この機能が有効な場合,READ文で読み込んだ固定長形式のレコードを,REWRITE文を実行してレコード領域長より短いレコードに更新しようとしたときは,読み込んだレコード長と更新するレコード長が不一致となり,REWRITE文が失敗します。レコード領域長より短いレコードに対してREWRITE文を実行するときは,可変長形式のファイルで定義して,読み込んだレコード長と変わらないようにしてください。
(例)
- 入力レコード
'AAAAA'
- 固定長形式のファイル/レコード定義
FD FILE-1. 01 FILE-1-REC PIC X(10).
- 可変長形式のファイル/レコード定義
FD FILE-2 RECORD IS VARYING IN SIZE FROM 1 TO 10 CHARACTERS DEPENDING ON REC-LEN. 01 FILE-2-REC PIC X(10).
表6‒4 レコード定義より短いレコードに対するREWRITE文の動作 内容と結果
機能の有効・無効状態
有効
無効
固定長形式
可変長形式
固定長形式
可変長形式
READ文実行後のレコード領域の内容
'AAAAA△△△△△'
'AAAAA'※
'AAAAA△△△△△'
'AAAAA'※
REWRITE文でレコードを'aaaaa'に更新するときの結果
半角空白を含む10バイトを更新しようとしてKCCC3521R-Sエラーとなる。
'aaaaa'に更新される。
レコード末尾の半角空白は削除され,'aaaaa'で更新される(入力レコード長と等しくなる)。
- (凡例)
-
△:半角空白
- 注※
-
REC-LEN項目には入力レコード長が格納される。
(5) 使用例
環境変数CBLTEXTWRITESPACEと環境変数CBLD_ファイル名の指定を組み合わせて使用する場合の例を次に示します。
- 環境変数の指定
CBLTEXTWRITESPACE=YES CBLD_FILE_2=NOTEXTWRITESPACE
- プログラム例
IDENTIFICATION DIVISION. PROGRAM-ID. SAMPLE1. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FILE-1 ASSIGN TO SYS100 ORGANIZATION IS LINE SEQUENTIAL. SELECT FILE-2 ASSIGN TO SYS200 ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD FILE-1. 01 FILE-1-REC PIC X(10). FD FILE-2. 01 FILE-2-REC PIC X(10). PROCEDURE DIVISION. OPEN OUTPUT FILE-1 FILE-2. * レコード領域の後ろ5バイトは半角空白となる MOVE '12345' TO FILE-1-REC FILE-2-REC. * FILE-1は,CBLTEXTWRITESPACE=YESによって機能が有効なため,レ * コード末尾の半角空白は削除されない。 WRITE FILE-1-REC. * FILE-2は,CBLD_FILE_2=NOTEXTWRITESPACEによって機能が無効なた * め,レコード末尾の半角空白は削除される。 WRITE FILE-2-REC. :
- 実行結果
-
FILE1の内容:12345△△△△△改行
FILE2の内容:12345改行
- (凡例)
-
△:半角空白文字
改行:改行文字