メインコンテンツにスキップ
モジュール 5 · レッスン 2 / 2コース内の 10/10~15 min
モジュールのレッスン (2/2)

ファイル I/O 操作

ファイルが関連付けられ、DATA DIVISION で宣言されると、PROCEDURE DIVISION 内でそのファイルを操作できるようになります。 COBOL では、ファイルのライフサイクルの管理は、ファイルを開き、操作 (読み取りまたは書き込み) を実行し、閉じるという標準的な強制的なフローに従います。


1. ファイルを開く: OPEN ステートメント

ファイルの読み取りまたは書き込みを行う前に、適切なアクセス モードを指定してファイルを開く必要があります。

COBOL
       OPEN INPUT SALES-FILE.

主なモードは次のとおりです。

  • INPUT: ファイルは読み取り専用モードで開かれます。ファイルはディスク上に存在する必要があります。存在しない場合、プログラムは失敗します。
  • OUTPUT: ファイルは書き込みモードで開かれています。ファイルがすでに存在する場合、以前の内容は削除されます (上書き)。存在しない場合は作成されます。
  • EXTEND: データを追加するためにファイルが開かれています。新しいレコードは、既存のファイルの末尾から書き込まれます。
  • I-O: ファイルは読み取りと書き込みの両方のために開かれます (主に、線形順次ファイルではなく、相対またはインデックス付きアクセス ファイルに使用されます)。

2. データの読み取り: READ ステートメント

シーケンシャル ファイルからレコードを読み取るには、READ ステートメントを使用します。ファイルに含まれるレコードの数が事前にわからないため、常に AT END 句を使用してファイルの終わり (EOF) 条件を処理する必要があります。

COBOL
       READ SALES-FILE
           AT END MOVE "Y" TO WS-EOF
       END-READ.
  • READ SALES-FILE: このステートメントはレコード名ではなく、論理ファイル名 (SELECT 句と FD 句で定義されている) を参照していることに注意してください。
  • AT END: 利用可能な最後のレコードを超えて読み取ろうとするときに実行する命令を指定します。通常、フラグ変数 (WS-EOF など) を "Y" に設定します。
  • END-READ: 読み取りステートメントを明示的に終了します。

3. データの書き込み: WRITE ステートメント

ファイルにデータを挿入するには、WRITE ステートメントを使用します。

[!警告] COBOL では、ファイル (READ SALES-FILE) を読み取りますが、レコード (WRITE SALES-RECORD) を書き込みます。 WRITE SALES-FILE の記述は、コンパイルを妨げる一般的な構文エラーです。

COBOL
       MOVE 1001 TO EMP-ID.
       MOVE "MARIO ROSSI" TO EMP-NAME.
       WRITE SALES-RECORD.

WRITE ステートメントを実行する前に、FD レコード構造の下位フィールド (この場合は SALES-RECORD) をメモリに設定する必要があります。


4. ファイルを閉じる: CLOSE ステートメント

処理が完了したら、開いているすべてのファイルを閉じてシステム リソースを解放し、すべてのデータがディスクに書き込まれるようにする必要があります。

COBOL
       CLOSE SALES-FILE.

CLOSE ステートメントは、レコード名ではなく論理ファイル名を引数として取ることに注意してください。


試してみてください

運動#cobol.m5.l2.e1
試行回数: 0読み込み中…

INPUT モードで SALES-FILE を開き、最初のレコードを読み取り、ファイルの終わりに達したときに WS-EOF 制御変数を「Y」に設定することにより、手順部を完了します。最後に、停止する前に必ずファイルを閉じてください。

エディターを読み込み中…
ヒントを表示

OPEN INPUT SALES-FILE の順に書き込みます。次に、最後に SALES-FILE を読み取り、'Y' を WS-EOF END-READ に移動します。次に、販売ファイルを閉じます。そして最後にストップラン。

3 回の試行後に解決策が利用可能になります

運動#cobol.m5.l2.e2
試行回数: 0読み込み中…

OUTPUT モードで SALES-FILE を開いて、PROCEDURE DIVISION を完了します。値 1001 を SALES-ID に移動し、値 250.50 を SALES-AMOUNT に移動し、SALES-RECORD をファイルに書き込みます。最後に、プログラムを停止する前にファイルを閉じます。

エディターを読み込み中…
ヒントを表示

OPEN OUTPUT SALES-FILE.でファイルを開き、MOVEでSALES-IDとSALES-AMOUNTに値を代入し、WRITE SALES-RECORDを実行します。 (ファイルではなくレコードを書き込みます!)、CLOSE SALES-FILE で閉じます。 STOP RUN で終了します。

3 回の試行後に解決策が利用可能になります