1. 入出力セクション

入出力セクションの正確な内容は、ファイル編成とアクセス方式によって異なります。詳細については、 ORGANIZATION節およびACCESS MODE節の説明を参照してください。

入出力セクションは必ず環境部に記述される必要があり、2つの段落を含みます。

figure ed input output section
Figure 1. 入出力セクションの形式
  • FILE-CONTROL

    • FILE-CONTROLキーワードは、FILE-CONTROL段落を指定します。このキーワードは、FILE-CONTROL段落の先頭に一度だけ指定できます。

    • FILE-CONTROL段落は、FILE-CONTROLキーワードが記述されたとしても、プログラム内で定義されたファイルがない場合は、省略することができます。

    • FILE-CONTROL段落は、物理ファイルを指定します。

  • IO-CONTROL

    • IO-CONTROLキーワードは、IO-CONTROL段落を指定します。

    • IO-CONTROL段落は、COBOLプログラムと外部のデータセット間の効率的なデータ転送に必要な情報を記述します。

1.1. FILE-CONTROL段落

FILE-CONTROL段落は、COBOLプログラムの各ファイルを外部データセットに関連付け、ファイル編成、アクセス方式、およびその他の情報を指定します。

以下は、使用可能なファイル編成およびアクセス方式についての説明です。

ファイル編成 アクセス方式

順次編成

非VSAM、VSAM

相対編成

VSAM

索引編成

VSAM

行順次編成

テキスト・ストリームI/O

FILE-CONTROL段落は、FILE CONTROLキーワードで始まり、その後にピリオド(.)が付きます。

この段落は、データ部のFD項目とSD項目に記述されたファイルに対して、それぞれ1つの項目を含んでいる必要があります。各項目では、SELECT節が最初に記述される必要があります。その他の節は、任意の順序で記述することができます。

以下は、FILE-CONTROL段落の形式です。

  • 順次ファイル制御項目

    figure ed file control format1
    Figure 2. FILE-CONTROL段落の形式1
  • 索引付きファイル制御項目

    figure ed file control format2
    Figure 3. FILE-CONTROL段落の形式2
    figure ed file control format2 entry1
    Figure 4. FILE-CONTROL段落の形式2 - 項目
  • 相対ファイル制御項目

    figure ed file control format3
    Figure 5. FILE-CONTROL段落の形式3
  • 行順次ファイル制御項目

    figure ed file control format4
    Figure 6. FILE-CONTROL段落の形式4

1.1.1. SELECT節

SELECT節は、COBOLプログラムのファイル識別子を定義します。

項目 説明

SELECT OPTIONAL

構文チェックのみを行います。SELECTのみを設定した場合と同様に実行します。

file-name-1

データ部のFD項目またはSD項目で識別できる必要があります。

COBOLのユーザー定義名の命名規則に適合している必要があります。

少なくとも1文字の英字を含み、現在のプログラム内で一意である必要があります。

1.1.2. ASSIGN節

ASSIGN節は、プログラム内のファイル名を実際の外部データセットに関連付けます。

項目 説明

assignment-name-1

外部データセットの名前を指定します。

JCL DD文に記述された名前、またはファイル・パスを指定します。

ソート・ファイルまたはマージ・ファイルである場合、名前はコメントとして処理されます。

1.1.3. ORGANIZATION節

ORGANIZATION節は、ファイルの論理構造を指定します。論理構造は、ファイルの作成時点で確定され、それ以降は変更することができません。

  • ORGANIZATION IS SEQUENTIAL(形式1)

  • ORGANIZATION IS INDEXED(形式2)

  • ORGANIZATION IS RELATIVE(形式3)

  • ORGANIZATION IS LINE SEQUENTIAL(形式4)

ORGANIZATION節を省略する場合、コンパイラーはORGANIZATION IS SEQUENTIALに設定します。

ファイルの作成時にデータの編成を決定します。ファイルは一度作成されると、拡張することはできますが、その編成を変更することはできません。

  • 順次編成

    • レコードの物理的な順序が、レコードの順序を決定します。ファイルを拡張しても、ファイルの中のレコード間の前後関係は変更されません。

    • レコードは、固定長または可変長のどちらも可能です。

    • キーはありません。

  • 索引編成

    • ファイルの各レコードは、1つ以上の内部キー(キー・データ項目)を持ちます。それぞれのキーは索引を持ち、各索引は対応する内部キー・データ項目の内容に従って、レコードの検索方法を提供します。

    • レコードは、固定長または可変長のどちらも可能です。

    • 各レコードは、基本キー・データ項目を含んでいる必要があります。

      レコードの挿入、更新、削除を実行するとき、そのレコードは基本キー値で識別することができます。したがって、基本キー・データ項目の値は一意である必要があり、レコードが更新されるときに変更されてはなりません。この基本キー値は、FILE-CONTROL段落のRECORD KEY節に記述することにより、プログラムで使用することができます。

    • 索引編成ファイルの各レコードは、複数の代替キー・データ項目を持つことができます。

      各代替キーは読み出すレコードを識別する別の方法を提供します。この代替キー値は、FILE-CONTROL段落のALTERNATE RECORD KEY節に記述することにより、プログラムで使用することができます。

  • 相対編成

    • それぞれのレコードは、相対レコード番号によって識別されます。相対レコード番号は、レコードには含まれません。

    • アクセス方式は、相対レコード番号に基づいてレコードを格納および取得する方式です。

    • ファイル内のレコードの物理的な順序は、各レコードの相対レコード番号とは関係がありません。

    • レコードは、固定長または可変長のどちらも可能です。

  • 行順次編成

    • 各レコードは、レコードの末尾にレコード区切り子が付きます。区切り子は、レコード長には含まれません。

    • レコードがファイルに書き込まれるとき、レコードの末尾に空白文字がある場合は、それを削除した後レコード区切り子が追加されます。

    • レコードを読み取るときは、レコード区切り子は削除され、レコードの残りの部分は空白文字で埋められます。EOFを検出した場合は、レコード領域の残りは空白文字で埋められます。

    • ファイルに改行文字がある場合、その改行文字はレコード区切り子として機能します。

コンパイラーは、索引編成や相対編成を直接提供しませんが、OpenFrameファイル・システムと連携して利用される場合は、サポートすることができます。

1.1.4. ACCESS MODE節

ACCESS MODE節は、ファイルのレコードを処理するためにアクセスする方式を定義します。省略する場合、順次アクセスが設定されます。

  • ACCESS MODE IS SEQUENTIAL

    すべての形式で記述することができます。

    形式 説明

    形式1:順次アクセス

    ファイルのレコードは、ファイルの作成または拡張時に生成されたシーケンスによってアクセスされます。

    形式1は、順次アクセスのみをサポートします。

    形式2:索引アクセス

    ファイルのレコードは、レコード・キー値の昇順にアクセスされます。

    形式3:相対アクセス

    ファイルのレコードは、相対レコード番号の昇順にアクセスされます。

    形式4:行順次アクセス

    ファイルのレコードは、ファイルの作成または拡張時に生成されたシーケンスによってアクセスされます。

    形式4は、順次アクセスのみをサポートします。

  • ACCESS MODE IS RANDOM

    形式2と形式3で記述することができます。

    形式 説明

    形式2:索引アクセス

    レコード・キー・データ項目の値に基づいて、レコードにアクセスします。

    形式3:相対アクセス

    相対キー・データ項目の値に基づいて、レコードにアクセスします。

  • ACCESS MODE IS DYNAMIC

    形式2と形式3で記述することができます。

    形式 説明

    形式2:索引アクセス

    ファイルのレコードは、使用された入出力ステートメントの形式に応じて、順次にまたはランダムにアクセスされます。

    形式3:相対アクセス

    ファイルのレコードは、使用された入出力ステートメントの形式に応じて、順次にまたはランダムにアクセスされます。

1.1.5. RECORD KEY節

RECORD KEY節(形式2)は、索引付きファイルの基本レコード・キーを定義するデータ項目を記述します。基本レコード・キー・データ項目の値は、一意である必要があります。

  • data-name-2

    • 基本レコード・キー・データ項目です。

    • これは、ファイルのレコード記述項目に記述されている必要があります。

      レコード・キーは、次のデータ・カテゴリのいずれかを持つことができます。

      • 英数字

      • 数字

      • 数字編集

      • 英数字編集

      • 英字

      • 外部浮動小数点

      • 内部浮動小数点

      • DBCS

    • data-name-2は、可変オカレンス・データ項目を含むグループ項目を参照することはできません。data-name-2は、修飾することができます。

    • data-name-2のデータ記述とレコード内での相対位置は、ファイルが定義されたときに使用されたものと同じである必要があります。

1.1.6. ALTERNATE RECORD KEY節

ALTERNATE RECORD KEY節(形式2)は、索引付きファイルの代替レコード・キーを定義するデータ項目を記述します。

  • data-name-3

    • 代替レコード・キー・データ項目です。

    • これは、ファイルのレコード記述項目に記述されている必要があります。

      レコード・キーは、次のデータ・カテゴリのいずれかを持つことができます。

      • 英数字

      • 数字

      • 数字編集

      • 英数字編集

      • 英字

      • 外部浮動小数点

      • 内部浮動小数点

      • DBCS

    • data-name-3は、可変オカレンス・データ項目を含むグループ項目を参照することはできません。data-name-3は、修飾することができます。

    • data-name-3のデータ記述とレコード内での相対位置は、ファイルが定義されたときに使用されたものと同じである必要があります。

DUPLICATES句を指定しない場合、ALTERNATE RECORD KEYデータ項目が参照する内容は、ファイル内で一意である必要があります。

1.1.7. RELATIVE KEY節

RELATIVE KEY節(形式3)には、相対ファイル内のレコードの相対レコード番号を定義するデータ項目を記述します。

項目 説明

data-name-4

符号なし整数データ項目を指定します。PICTURE記号のPは含むことができません。

data-name-4は、相対ファイルのレコード記述項目に定義してはなりません。つまり、相対キーはレコードの一部ではありません。

data-name-4は、修飾することができます。

ACCESS IS SEQUENTIALについては、STARTステートメントを使用する場合のみ、data-name-4が必要です。ACCESS IS RANDOMとACCESS IS DYNAMICについては、常にdata-name-4が必要です。

1.1.8. FILE STATUS節

FILE STATUS節は、入出力ステートメントの実行結果を示します。FILE STATUS節を指定すると、ファイルに対する入出力操作が実行された後、その結果値をファイル・ステータス・キー・データ項目に格納します。

項目 説明

data-name-1

ファイル・ステータス・キー・データ項目は、WORKING-STORAGE、LOCAL-STORAGE、またはLINKAGEセクションで、次のいずれかの形式で定義することができます。

  • 2文字の英数字データ項目

  • 2桁の数字データ項目(usage DISPLAY)

data-name-1は、PICTURE記号のPを含むことができません。

data-name-1は、修飾することができます。

ファイル・ステータス・キー・データ項目は、任意の位置に記述してはなりません。つまり、OCCURS DEPENDING ON節を含むデータ項目の次に使用することはできません。

data-name-8

構文チェックのみ行われ、使用されません。

1.2. IO-CONTROL段落

IO-CONTROL段落は、様々なファイルがストレージ領域を共有する場合に使用します。

figure ed io control
Figure 7. IO-CONTROL段落

1.2.1. SAME AREA節

SAME AREA節は、2つ以上のファイルのI/O処理時に、同じレコード・バッファー領域を使用するように指定します。指定されたファイルは、編成やアクセス方式が同じである必要はありません。

項目 説明

filename-3, file-name-4

同じプログラムのFILE-CONTROL段落に記述する必要があります。

EXTERNAL節で定義されたファイルを記述してはなりません。