COBOL - Động từ xử lý tệp

Các động từ xử lý tệp được sử dụng để thực hiện các hoạt động khác nhau trên tệp. Sau đây là các động từ xử lý tệp:

  • Open
  • Read
  • Write
  • Rewrite
  • Delete
  • Start
  • Close

Mở động từ

Mở là thao tác tệp đầu tiên phải được thực hiện. Nếu Mở thành công, thì chỉ có thể thực hiện thêm các thao tác trên tệp. Chỉ sau khi mở tệp, các biến trong cấu trúc tệp mới có sẵn để xử lý.FILE STATUS biến được cập nhật sau mỗi hoạt động tệp.

Cú pháp

OPEN "mode" file-name.

Ở đây, tên tệp là chuỗi ký tự, bạn sẽ sử dụng để đặt tên tệp của mình. Một tệp có thể được mở ở các chế độ sau:

Sr.No. Chế độ & Mô tả
1

Input

Chế độ đầu vào được sử dụng cho các tệp hiện có. Ở chế độ này, chúng ta chỉ có thể đọc tệp, không cho phép thực hiện các thao tác khác trên tệp.

2

Output

Chế độ đầu ra được sử dụng để chèn các bản ghi trong tệp. Nếu mộtsequential fileđược sử dụng và tệp đang giữ một số bản ghi, sau đó các bản ghi hiện có sẽ bị xóa trước tiên và sau đó các bản ghi mới sẽ được chèn vào tệp. Nó sẽ không xảy ra như vậy trong trường hợpindexed file hoặc một relative file.

3

Extend

Chế độ mở rộng được sử dụng để nối các bản ghi trong một sequential file. Trong chế độ này, các bản ghi được chèn vào cuối. Nếu chế độ truy cập tệp làRandom hoặc là Dynamic, thì không thể sử dụng chế độ mở rộng.

4

I-O

Chế độ Input-Output được sử dụng để đọc và viết lại các bản ghi của một tệp.

Đọc động từ

Động từ đọc được sử dụng để đọc các bản ghi tệp. Chức năng của đọc là tìm nạp các bản ghi từ một tệp. Tại mỗi động từ đọc, chỉ một bản ghi có thể được đọc vào cấu trúc tệp. Để thực hiện thao tác đọc, hãy mở tệp ở chế độ INPUT hoặc IO. Tại mỗi câu lệnh đọc, con trỏ tệp được tăng lên và do đó các bản ghi kế tiếp được đọc.

Cú pháp

Sau đây là cú pháp để đọc các bản ghi khi chế độ truy cập tệp là tuần tự:

READ file-name NEXT RECORD INTO ws-file-structure
   AT END DISPLAY 'End of File'
   NOT AT END DISPLAY 'Record Details:' ws-file-structure
END-READ.

Sau đây là các tham số được sử dụng:

  • NEXT RECORD là tùy chọn và được chỉ định khi một tệp tuần tự được lập chỉ mục đang được đọc tuần tự.

  • Mệnh đề INTO là tùy chọn. ws-file-structure được định nghĩa trong Phần WorkingStorage để lấy các giá trị từ câu lệnh READ.

  • Điều kiện AT END trở thành True khi đạt đến cuối tệp.

Example- Ví dụ sau đây đọc một tệp hiện có bằng cách sử dụng tổ chức tuần tự dòng. Chương trình này có thể được biên dịch và thực thi bằngLive Demo tùy chọn nơi nó sẽ hiển thị tất cả các bản ghi có trong tệp.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT STUDENT ASSIGN TO 'input.txt'
      ORGANIZATION IS LINE SEQUENTIAL.            

DATA DIVISION.
   FILE SECTION.
   FD STUDENT.
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(5).
      05 NAME PIC A(25).

   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
   01 WS-EOF PIC A(1). 

PROCEDURE DIVISION.
   OPEN INPUT STUDENT.
      PERFORM UNTIL WS-EOF='Y'
         READ STUDENT INTO WS-STUDENT
            AT END MOVE 'Y' TO WS-EOF
            NOT AT END DISPLAY WS-STUDENT
         END-READ
      END-PERFORM.
   CLOSE STUDENT.
STOP RUN.

Giả sử dữ liệu tệp đầu vào có sẵn trong input.txt tệp chứa những điều sau -

20003 Mohtashim M.
20004 Nishant Malik
20005 Amitabh Bachhan

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

20003 Mohtashim M.            
20004 Nishant Malik           
20005 Amitabh Bachhan

Cú pháp

Sau đây là cú pháp để ghi một bản ghi khi chế độ truy cập tệp là ngẫu nhiên:

READ file-name RECORD INTO ws-file-structure
   KEY IS rec-key
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Details: ' ws-file-structure
END-READ.

Example- Ví dụ sau đây đọc một tệp hiện có bằng cách sử dụng tổ chức được lập chỉ mục. Chương trình này có thể được biên dịch và thực thi bằngJCLtrên Mainframes nơi nó sẽ hiển thị tất cả các bản ghi có trong tệp. Trên máy chủ Mainframes, chúng tôi không sử dụng tệp văn bản; thay vào đó chúng tôi sử dụng các tệp PS.

Giả sử rằng tệp hiện diện trên Máy tính lớn có cùng nội dung với tệp input.txt trong ví dụ trên.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO IN1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT.
      01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(5).
      05 NAME PIC A(25).
     
   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).

PROCEDURE DIVISION.
   OPEN INPUT STUDENT.
      MOVE 20005 TO STUDENT-ID.
      
      READ STUDENT RECORD INTO WS-STUDENT-FILE
         KEY IS STUDENT-ID
         INVALID KEY DISPLAY 'Invalid Key'
         NOT INVALID KEY DISPLAY WS-STUDENT-FILE
      END-READ.
      
   CLOSE STUDENT.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

20005 Amitabh Bachhan

Viết động từ

Động từ Write được sử dụng để chèn các bản ghi trong một tệp. Khi bản ghi được ghi, nó không còn có sẵn trong bộ đệm bản ghi. Trước khi chèn các bản ghi vào tệp, hãy di chuyển các giá trị vào bộ đệm bản ghi và sau đó thực hiện động từ ghi.

Viết câu lệnh có thể được sử dụng với FROMtùy chọn ghi trực tiếp bản ghi từ các biến lưu trữ đang hoạt động. Từ là một mệnh đề tùy chọn. Nếu chế độ truy cập là tuần tự, thì để ghi bản ghi, tệp phải mở ở chế độ Đầu ra hoặc chế độ Mở rộng. Nếu chế độ truy cập là ngẫu nhiên hoặc động, thì để ghi bản ghi, tệp phải mở ở chế độ Đầu ra hoặc chế độ IO.

Cú pháp

Sau đây là cú pháp để đọc một bản ghi khi tổ chức tệp là tuần tự:

WRITE record-buffer [FROM ws-file-structure]
END-WRITE.

Sau đây là cú pháp để đọc bản ghi khi tổ chức tệp được lập chỉ mục hoặc tương đối:

WRITE record-buffer [FROM ws-file-structure]
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Inserted'
END-WRITE.

Example - Ví dụ sau cho thấy cách chèn một bản ghi mới trong một tệp mới khi tổ chức tuần tự.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO OUT1
      ORGANIZATION IS SEQUENTIAL
      ACCESS IS SEQUENTIAL
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(5).
      05 NAME PIC A(25).
      05 CLASS PIC X(3).

   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN EXTEND STUDENT.
      MOVE 1000 TO STUDENT-ID.
      MOVE 'Tim' TO NAME.
      MOVE '10' TO CLASS.
      WRITE STUDENT-FILE
      END-WRITE.	
   CLOSE STUDENT.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)

Khi bạn biên dịch và thực thi chương trình trên, nó sẽ thêm một bản ghi mới vào tệp đầu ra.

1000 Tim         10

Viết lại động từ

Động từ ghi lại được sử dụng để cập nhật các bản ghi. Tệp phải được mở ở chế độ IO cho các hoạt động viết lại. Nó chỉ có thể được sử dụng sau khi thao tác Đọc thành công. Động từ ghi lại ghi đè lên lần đọc bản ghi cuối cùng.

Cú pháp

Sau đây là cú pháp để đọc một bản ghi khi tổ chức tệp là tuần tự:

REWRITE record-buffer [FROM ws-file-structure]
END-REWRITE.

Sau đây là cú pháp để đọc bản ghi khi tổ chức tệp được lập chỉ mục hoặc tương đối:

REWRITE record-buffer [FROM ws-file-structure]
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Updated'
END-REWRITE.

Example - Ví dụ sau cho thấy cách cập nhật bản ghi hiện có mà chúng tôi đã chèn trong bước Ghi trước đó -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO IN1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(4).
      05 NAME PIC A(12).
      05 CLASS PIC X(3).
      
   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN I-O STUDENT.
   MOVE '1000' TO STUDENT-ID.
  
   READ STUDENT
      KEY IS STUDENT-ID
      INVALID KEY DISPLAY ‘KEY IS NOT EXISTING’
   END-READ.
  
   MOVE 'Tim Dumais' TO NAME.
   REWRITE STUDENT-FILE
   END-REWRITE.
   CLOSE STUDENT.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR

Khi bạn biên dịch và thực thi chương trình trên, nó sẽ cập nhật bản ghi -

1000 Tim Dumais  10

Xóa động từ

Xóa động từ chỉ có thể được thực hiện trên các tệp được lập chỉ mục và tương đối. Tệp phải được mở ở chế độ IO. Trong tổ chức tệp tuần tự, các bản ghi không thể bị xóa. Bản ghi được đọc lần cuối bởi câu lệnh Read sẽ bị xóa trong trường hợp chế độ truy cập tuần tự. Trong chế độ truy cập ngẫu nhiên, chỉ định khóa ghi và sau đó thực hiện thao tác Xóa.

Cú pháp

Sau đây là cú pháp để xóa một bản ghi:

DELETE file-name RECORD
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'Record Deleted'
END-DELETE.

Example - để xóa một bản ghi hiện có -

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT STUDENT ASSIGN TO OUT1
      ORGANIZATION IS INDEXED
      ACCESS IS RANDOM
      RECORD KEY IS STUDENT-ID
      FILE STATUS IS FS.

DATA DIVISION.
   FILE SECTION.
   FD STUDENT
   01 STUDENT-FILE.
      05 STUDENT-ID PIC 9(4).
      05 NAME PIC A(12).
      05 CLASS PIC X(3).
   WORKING-STORAGE SECTION.
   01 WS-STUDENT.
      05 WS-STUDENT-ID PIC 9(5).
      05 WS-NAME PIC A(25).
      05 WS-CLASS PIC X(3).

PROCEDURE DIVISION.
   OPEN I-O STUDENT.
   MOVE '1000' TO STUDENT-ID.
   
   DELETE STUDENT RECORD
      INVALID KEY DISPLAY 'Invalid Key'
      NOT INVALID KEY DISPLAY 'Record Deleted'
   END-DELETE.
   
   CLOSE STUDENT.
STOP RUN.

JCL để thực hiện chương trình COBOL ở trên -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

Record Deleted

Bắt đầu động từ

Động từ bắt đầu chỉ có thể được thực hiện trên các tệp được lập chỉ mục và tệp tương đối. Nó được sử dụng để đặt con trỏ tệp tại một bản ghi cụ thể. Chế độ truy cập phải tuần tự hoặc động. Tệp phải được mở ở chế độ IO hoặc Input.

Cú pháp

Sau đây là cú pháp để đặt con trỏ tại một bản ghi cụ thể:

START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key
   INVALID KEY DISPLAY 'Invalid Key'
   NOT INVALID KEY DISPLAY 'File Pointer Updated'
END-START.

Đóng động từ

Động từ đóng được sử dụng để đóng một tệp. Sau khi thực hiện thao tác Đóng, các biến trong cấu trúc tệp sẽ không có sẵn để xử lý. Liên kết giữa chương trình và tệp bị mất.

Cú pháp

Sau đây là cú pháp để đóng một tệp:

CLOSE file-name.