Chuyển đến nội dung chính
Mô-đun 5 · Bài học 2 trong tổng số 210/10 trong khóa học~15 min
Bài học theo mô-đun (2/2)

Thao tác I/O tệp

Khi một tệp đã được liên kết và khai báo trong DATA DIVISION, chúng ta có thể thao tác với tệp đó bên trong PROCEDURE DIVISION. Trong COBOL, việc quản lý vòng đời của tệp tuân theo một quy trình bắt buộc, tiêu chuẩn: mở, thực hiện các thao tác (đọc hoặc ghi) và đóng.


1. Mở file: Câu lệnh OPEN

Trước khi bạn có thể đọc hoặc ghi vào một tập tin, nó phải được mở bằng cách chỉ định chế độ truy cập thích hợp:

COBOL
       OPEN INPUT SALES-FILE.

Các chế độ chính là:

  • INPUT: File được mở ở chế độ chỉ đọc. Tệp phải tồn tại trên đĩa, nếu không chương trình sẽ thất bại.
  • OUTPUT: File được mở ở chế độ ghi. Nếu tệp đã tồn tại thì nội dung trước đó của nó sẽ bị xóa (ghi đè). Nếu nó không tồn tại, nó được tạo ra.
  • EXTEND: File được mở để nối dữ liệu. Các bản ghi mới sẽ được ghi bắt đầu từ cuối tệp hiện có.
  • I-O: Tệp được mở cho cả đọc và ghi (chủ yếu được sử dụng cho các tệp truy cập tương đối hoặc được lập chỉ mục, không phải tệp tuần tự tuyến tính).

2. Đọc dữ liệu: Câu lệnh READ

Để đọc bản ghi từ tệp tuần tự, chúng ta sử dụng câu lệnh READ. Vì chúng ta không biết trước tệp chứa bao nhiêu bản ghi nên chúng ta phải luôn xử lý điều kiện cuối tệp (EOF) bằng cách sử dụng mệnh đề AT END:

COBOL
       READ SALES-FILE
           AT END MOVE "Y" TO WS-EOF
       END-READ.
  • READ SALES-FILE: Lưu ý rằng câu lệnh tham chiếu đến tên tệp logic (được xác định trong mệnh đề SELECT và FD), chứ không phải tên bản ghi.
  • AT END: Chỉ định hướng dẫn sẽ chạy khi bạn cố đọc qua bản ghi có sẵn cuối cùng. Thông thường, bạn đặt biến cờ (như WS-EOF) thành "Y".
  • END-READ: Chấm dứt câu lệnh đọc một cách rõ ràng.

3. Ghi dữ liệu: Câu lệnh WRITE

Để chèn dữ liệu vào một tệp, chúng tôi sử dụng câu lệnh WRITE.

[!CẢNH BÁO] Trong COBOL, bạn đọc tệp (READ SALES-FILE), nhưng bạn viết bản ghi (WRITE SALES-RECORD). Viết WRITE SALES-FILE là một lỗi cú pháp phổ biến sẽ ngăn cản quá trình biên dịch.

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

Trước khi thực thi câu lệnh WRITE, các trường phụ của cấu trúc bản ghi FD (trong trường hợp này là SALES-RECORD) phải được điền vào bộ nhớ.


4. Đóng tệp: Câu lệnh ĐÓNG

Khi quá trình xử lý hoàn tất, mọi tệp đang mở phải được đóng lại để giải phóng tài nguyên hệ thống và đảm bảo tất cả dữ liệu được ghi vào đĩa:

COBOL
       CLOSE SALES-FILE.

Lưu ý rằng câu lệnh CLOSE lấy tên tệp logic làm đối số chứ không phải tên bản ghi.


Hãy thử nó

tập thể dục#cobol.m5.l2.e1
Nỗ lực: 0Đang tải…

Hoàn thành PHẦN THỦ TỤC bằng cách mở TỆP BÁN HÀNG ở chế độ INPUT, đọc bản ghi đầu tiên và đặt biến điều khiển WS-EOF thành 'Y' khi đến cuối tệp. Cuối cùng, hãy nhớ đóng file trước khi dừng.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Viết theo thứ tự: MỞ ĐẦU VÀO FILE BÁN HÀNG. sau đó ĐỌC TỆP BÁN HÀNG Ở CUỐI DI CHUYỂN 'Y' ĐẾN WS-EOF END-READ. sau đó ĐÓNG TỆP BÁN HÀNG. và cuối cùng là DỪNG CHẠY.

Giải pháp khả dụng sau 3 lần thử

tập thể dục#cobol.m5.l2.e2
Nỗ lực: 0Đang tải…

Hoàn tất PHẦN THỦ TỤC bằng cách mở FILE BÁN HÀNG ở chế độ OUTPUT. Di chuyển giá trị 1001 sang SALES-ID và 250,50 thành SALES-AMOUNT, sau đó ghi SALES-RECORD vào tệp. Cuối cùng, đóng file trước khi dừng chương trình.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Mở tệp bằng OPEN OUTPUT SALES-FILE., sử dụng MOVE để gán giá trị cho SALES-ID và SALES-AMOUNT, thực hiện VIẾT BẢNG TIN BÁN HÀNG. (viết bản ghi chứ không phải tập tin!), đóng bằng ĐÓNG TỆP BÁN HÀNG. và kết thúc bằng STOP RUN.

Giải pháp khả dụng sau 3 lần thử