COBOL2002 ユーザーズガイド
6.7.3 入出力手続き文と動作
(a) READ文でのテキスト編成ファイル固有の規則
- 物理ファイル上にあるレコードの区切り文字(改行文字)は,COBOLプログラムのレコード領域に格納されません。
- テキスト行がレコード長より短いときは,改行文字までの文字列が入力され,残りの部分には空白(X'20')が埋められます。改行文字はすべて切り捨てられます。
- テキスト行がレコード長より長いときは,ファイルの開くモードによって次のように動作が異なります。
- (I-Oモード以外で開いている場合)
- レコード長で区切られた複数レコードとして入力されます。このとき,FILE STATUS句を指定していると,入出力状態には04が返されます。
- (I-Oモードで開いている場合)
- READ文はエラーとなります。このとき,FILE STATUS句を指定していると,入出力状態には30が返されます。
- タブ文字(X'09')はそのままデータとして入力され,空白には置き換えられません。
- ファイルの終わりが改行文字でないときは,ファイルの終わりに改行文字があるとみなされます。
- レコード中にNULL(X'00')が含まれる場合,NULL(X'00')がデータとして入力されます。また,NULL(X'00')以降もデータとして入力されます。
- ファイル定義が可変長の場合,レコード記述項の最大長分の固定長として読み込まれます。このとき,レコード長には,ファイルから実際に読み込んだ長さが設定されます。
また,I-Oモード以外でファイルを開き,かつレコード記述項の長さが最大レコード長より短い場合,最大レコード長で確保されたレコード領域に最大レコード長で読み込まれます。このとき,DEPENDING ON指定のデータ名には,レコード記述項で定義したレコード長より大きい値が設定される場合があります。
このため,入出力状態が00の場合は改行文字の直前までの長さが,入出力状態が04の場合は最大レコード長が,それぞれDEPENDING ON指定のデータ名に設定されます。どちらの場合でも,COBOLプログラムから参照できるのは,レコード記述項で定義した長さ分の領域だけです。
(a) WRITE文でのテキスト編成ファイル固有の規則
- レコード領域の最後が半角空白文字(X'20')以外のときは,改行文字を付けて出力されます。
- レコード領域の最後が半角空白文字(X'20')のときは,末尾の半角空白文字(終端から半角空白文字以外の文字が出現するまでの部分)が切り捨てられ,改行文字を付けて出力されます。出力レコードの末尾の空白文字列を出力したい場合は,「6.7.5 レコード末尾の空白文字を出力する機能」を参照してください。
(a) REWRITE文でのテキスト編成ファイル固有の規則
- REWRITE文を実行する直前の入出力文はREAD文で,このREAD文が成功していなければなりません。
- REWRITE文は,読み込んだテキスト行の長さと更新用レコードの長さが等しい場合だけ,テキスト行が書き換えられます。それ以外の場合,REWRITE文はエラーとなり,FILE STATUS句を指定していると,入出力状態に44が返されます。なお,更新用レコードの長さとは,後続の半角空白文字を削除した長さを指します。更新するレコードの長さにレコード末尾の半角空白文字も含めたい場合は,「6.7.5 レコード末尾の空白文字を出力する機能」を参照してください。
- REWRITE文では,テキスト行のうち改行文字,またはファイルの終わり(EOF)の直前までを書き換えます。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.