COBOL - Sắp xếp nội bộ
Sắp xếp dữ liệu trong một tệp hoặc hợp nhất hai hoặc nhiều tệp là điều cần thiết phổ biến trong hầu hết các ứng dụng hướng tới doanh nghiệp. Sắp xếp được sử dụng để sắp xếp các bản ghi theo thứ tự tăng dần hoặc giảm dần, để có thể thực hiện xử lý tuần tự. Có hai kỹ thuật được sử dụng để phân loại tệp trong COBOL -
External sortđược sử dụng để sắp xếp các tệp bằng cách sử dụng tiện ích SORT trong JCL. Chúng tôi đã thảo luận điều này trong chương JCL. Hiện tại, chúng tôi sẽ tập trung vào sắp xếp nội bộ.
Internal sort được sử dụng để sắp xếp các tệp trong chương trình COBOL. SORT động từ được sử dụng để sắp xếp một tập tin.
Sắp xếp động từ
Ba tệp được sử dụng trong quá trình sắp xếp trong COBOL -
Input file là tệp mà chúng ta phải sắp xếp theo thứ tự tăng dần hoặc giảm dần.
Work fileđược sử dụng để giữ các bản ghi trong khi quá trình sắp xếp đang diễn ra. Hồ sơ tệp đầu vào được chuyển sang tệp công việc cho quá trình sắp xếp. Tệp này phải được xác định trong Mục Tệp trong mục nhập SD.
Output filelà tệp mà chúng tôi nhận được sau quá trình sắp xếp. Nó là đầu ra cuối cùng của động từ Sắp xếp.
Cú pháp
Sau đây là cú pháp để sắp xếp một tệp:
SORT work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORT thực hiện các hoạt động sau:
Mở tệp công việc ở chế độ IO, tệp đầu vào ở chế độ INPUT và tệp đầu ra ở chế độ OUTPUT.
Chuyển các bản ghi có trong tệp đầu vào sang tệp công việc.
Sắp xếp SORT-FILE theo trình tự tăng dần / giảm dần bằng phím rút lại.
Chuyển các bản ghi đã sắp xếp từ tệp công việc sang tệp đầu ra.
Đóng tệp đầu vào và tệp đầu ra và xóa tệp công việc.
Example
Trong ví dụ sau, INPUT là tệp đầu vào cần được sắp xếp theo thứ tự tăng dần -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT ASSIGN TO IN.
SELECT OUTPUT ASSIGN TO OUT.
SELECT WORK ASSIGN TO WRK.
DATA DIVISION.
FILE SECTION.
FD INPUT.
01 INPUT-STUDENT.
05 STUDENT-ID-I PIC 9(5).
05 STUDENT-NAME-I PIC A(25).
FD OUTPUT.
01 OUTPUT-STUDENT.
05 STUDENT-ID-O PIC 9(5).
05 STUDENT-NAME-O PIC A(25).
SD WORK.
01 WORK-STUDENT.
05 STUDENT-ID-W PIC 9(5).
05 STUDENT-NAME-W PIC A(25).
PROCEDURE DIVISION.
SORT WORK ON ASCENDING KEY STUDENT-ID-O
USING INPUT GIVING OUTPUT.
DISPLAY 'Sort Successful'.
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
//IN DD DSN = INPUT-FILE-NAME,DISP = SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP = SHR
//WRK DD DSN = &&TEMP
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:
Sort Successful
Hợp nhất động từ
Hai hoặc nhiều tệp có trình tự giống hệt nhau được kết hợp bằng cách sử dụng câu lệnh Merge. Các tệp được sử dụng trong quá trình hợp nhất -
- Tệp đầu vào - Đầu vào-1, Đầu vào-2
- Tệp công việc
- Tệp đầu ra
Cú pháp
Sau đây là cú pháp để hợp nhất hai hoặc nhiều tệp:
MERGE work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-1, input-2 GIVING output-file.
Merge thực hiện các hoạt động sau:
Mở tệp công việc ở chế độ IO, tệp đầu vào ở chế độ INPUT và tệp đầu ra ở chế độ OUTPUT.
Chuyển các bản ghi có trong tệp đầu vào sang tệp công việc.
Sắp xếp SORT-FILE theo trình tự tăng dần / giảm dần bằng phím rút lại.
Chuyển các bản ghi đã sắp xếp từ tệp công việc sang tệp đầu ra.
Đóng tệp đầu vào và tệp đầu ra và xóa tệp công việc.
Example
Trong ví dụ sau, INPUT1 và INPUT2 là các tệp đầu vào sẽ được hợp nhất theo thứ tự tăng dần -
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT1 ASSIGN TO IN1.
SELECT INPUT2 ASSIGN TO IN2.
SELECT OUTPUT ASSIGN TO OUT.
SELECT WORK ASSIGN TO WRK.
DATA DIVISION.
FILE SECTION.
FD INPUT1.
01 INPUT1-STUDENT.
05 STUDENT-ID-I1 PIC 9(5).
05 STUDENT-NAME-I1 PIC A(25).
FD INPUT2.
01 INPUT2-STUDENT.
05 STUDENT-ID-I2 PIC 9(5).
05 STUDENT-NAME-I2 PIC A(25).
FD OUTPUT.
01 OUTPUT-STUDENT.
05 STUDENT-ID-O PIC 9(5).
05 STUDENT-NAME-O PIC A(25).
SD WORK.
01 WORK-STUDENT.
05 STUDENT-ID-W PIC 9(5).
05 STUDENT-NAME-W PIC A(25).
PROCEDURE DIVISION.
MERGE WORK ON ASCENDING KEY STUDENT-ID-O
USING INPUT1, INPUT2 GIVING OUTPUT.
DISPLAY 'Merge Successful'.
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=INPUT1-FILE-NAME,DISP=SHR
//IN2 DD DSN=INPUT2-FILE-NAME,DISP=SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP=SHR
//WRK DD DSN = &&TEMP
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:
Merge Successful