COBOL2002 ユーザーズガイド


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) 規則

(4) 注意事項

(例)

入力レコード
'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‒5 レコード定義より短いレコードに対する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改行

(凡例)

△:半角空白文字

改行:改行文字