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