COBOL - การจัดเรียงภายใน
การจัดเรียงข้อมูลในไฟล์หรือการรวมไฟล์ตั้งแต่สองไฟล์ขึ้นไปเป็นสิ่งจำเป็นทั่วไปในแอปพลิเคชันที่มุ่งเน้นธุรกิจเกือบทั้งหมด การเรียงลำดับใช้สำหรับการจัดเรียงเร็กคอร์ดทั้งจากน้อยไปมากหรือมากไปหาน้อยเพื่อให้สามารถดำเนินการตามลำดับ มีสองเทคนิคที่ใช้ในการจัดเรียงไฟล์ในภาษาโคบอล -
External sortใช้เพื่อจัดเรียงไฟล์โดยใช้ยูทิลิตี้ SORT ใน JCL เราได้พูดถึงเรื่องนี้ในบท JCL ณ ตอนนี้เราจะเน้นไปที่การจัดเรียงภายใน
Internal sort ใช้เพื่อจัดเรียงไฟล์ภายในโปรแกรม COBOL SORT คำกริยาใช้ในการจัดเรียงไฟล์
เรียงกริยา
ไฟล์สามไฟล์ถูกใช้ในกระบวนการจัดเรียงในภาษาโคบอล -
Input file คือไฟล์ที่เราต้องเรียงลำดับจากน้อยไปมากหรือมากไปหาน้อย
Work fileใช้เพื่อเก็บบันทึกในขณะที่กระบวนการจัดเรียงกำลังดำเนินอยู่ บันทึกไฟล์อินพุตจะถูกโอนไปยังไฟล์งานสำหรับกระบวนการเรียงลำดับ ไฟล์นี้ควรกำหนดไว้ใน File-Section ภายใต้รายการ SD
Output fileคือไฟล์ที่เราได้รับหลังจากขั้นตอนการเรียงลำดับ เป็นผลลัพธ์สุดท้ายของคำกริยาเรียงลำดับ
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์ในการจัดเรียงไฟล์ -
SORT work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORT ดำเนินการดังต่อไปนี้ -
เปิดไฟล์งานในโหมด IO อินพุตไฟล์ในโหมด INPUT และไฟล์เอาต์พุตในโหมด OUTPUT
ถ่ายโอนระเบียนที่มีอยู่ในไฟล์อินพุตไปยังไฟล์งาน
จัดเรียงไฟล์เรียงตามลำดับจากน้อยไปหามาก / มากไปหาน้อยตามคีย์ใหม่
ถ่ายโอนเร็กคอร์ดที่เรียงลำดับจากไฟล์งานไปยังไฟล์เอาต์พุต
ปิดไฟล์อินพุตและเอาต์พุตไฟล์และลบไฟล์งาน
Example
ในตัวอย่างต่อไปนี้ INPUT คือไฟล์อินพุตที่ต้องเรียงลำดับจากน้อยไปมาก -
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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -
//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
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังนี้ -
Sort Successful
ผสานกริยา
ไฟล์ที่เรียงลำดับเหมือนกันตั้งแต่สองไฟล์ขึ้นไปจะถูกรวมเข้าด้วยกันโดยใช้คำสั่ง Merge ไฟล์ที่ใช้ในกระบวนการผสาน -
- ไฟล์อินพุต - อินพุต -1, อินพุต -2
- ไฟล์งาน
- ไฟล์เอาต์พุต
ไวยากรณ์
ต่อไปนี้เป็นไวยากรณ์ในการรวมไฟล์ตั้งแต่สองไฟล์ขึ้นไป -
MERGE work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-1, input-2 GIVING output-file.
การผสานดำเนินการดังต่อไปนี้ -
เปิดไฟล์งานในโหมด IO อินพุตไฟล์ในโหมด INPUT และไฟล์เอาต์พุตในโหมด OUTPUT
ถ่ายโอนระเบียนที่มีอยู่ในไฟล์อินพุตไปยังไฟล์งาน
จัดเรียงไฟล์เรียงตามลำดับจากน้อยไปหามาก / มากไปหาน้อยตามคีย์ใหม่
ถ่ายโอนเร็กคอร์ดที่เรียงลำดับจากไฟล์งานไปยังไฟล์เอาต์พุต
ปิดไฟล์อินพุตและเอาต์พุตไฟล์และลบไฟล์งาน
Example
ในตัวอย่างต่อไปนี้ INPUT1 และ INPUT2 เป็นไฟล์อินพุตที่จะรวมจากน้อยไปหามาก -
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 เพื่อดำเนินการโปรแกรม COBOL ข้างต้น -
//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
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นโปรแกรมจะให้ผลลัพธ์ดังนี้ -
Merge Successful