COBOL - sortowanie wewnętrzne

Sortowanie danych w pliku lub łączenie dwóch lub więcej plików jest powszechną koniecznością w prawie wszystkich aplikacjach biznesowych. Sortowanie służy do porządkowania rekordów w porządku rosnącym lub malejącym, tak aby można było przeprowadzić przetwarzanie sekwencyjne. Istnieją dwie techniki, które są używane do sortowania plików w języku COBOL -

  • External sortsłuży do sortowania plików za pomocą narzędzia SORT w JCL. Omówiliśmy to w rozdziale JCL. Od teraz skupimy się na sortowaniu wewnętrznym.

  • Internal sort służy do sortowania plików w programie w języku COBOL. SORT czasownik jest używany do sortowania pliku.

Sort Verb

W procesie sortowania w języku COBOL używane są trzy pliki -

  • Input file to plik, który musimy posortować w kolejności rosnącej lub malejącej.

  • Work filesłuży do przechowywania rekordów podczas procesu sortowania. Rekordy pliku wejściowego są przesyłane do pliku roboczego w celu sortowania. Ten plik należy zdefiniować w sekcji File w pozycji SD.

  • Output fileto plik, który otrzymujemy po sortowaniu. Jest to końcowe wyjście czasownika sortowania.

Składnia

Poniżej znajduje się składnia sortowania pliku -

SORT work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.

SORT wykonuje następujące operacje -

  • Otwiera plik roboczy w trybie IO, plik wejściowy w trybie INPUT i plik wyjściowy w trybie OUTPUT.

  • Przenosi rekordy obecne w pliku wejściowym do pliku roboczego.

  • Sortuje SORT-FILE w rosnącej / malejącej kolejności za pomocą klawisza rec.

  • Przenosi posortowane rekordy z pliku roboczego do pliku wyjściowego.

  • Zamyka plik-wejściowy i plik-wyjściowy oraz usuwa plik roboczy.

Example

W poniższym przykładzie INPUT jest plikiem wejściowym, który należy posortować w kolejności rosnącej -

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 aby wykonać powyższy program w języku 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

Kiedy kompilujesz i wykonujesz powyższy program, daje on następujący wynik -

Sort Successful

Merge Verb

Dwa lub więcej identycznie ułożonych plików łączy się za pomocą instrukcji Merge. Pliki używane w procesie scalania -

  • Pliki wejściowe - wejście-1, wejście-2
  • Plik roboczy
  • Plik wyjściowy

Składnia

Poniżej przedstawiono składnię łączenia dwóch lub więcej plików -

MERGE work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]

USING input-1, input-2 GIVING output-file.

Merge wykonuje następujące operacje -

  • Otwiera plik roboczy w trybie IO, pliki wejściowe w trybie INPUT i plik wyjściowy w trybie OUTPUT.

  • Przenosi rekordy obecne w plikach wejściowych do pliku roboczego.

  • Sortuje SORT-FILE w rosnącej / malejącej kolejności za pomocą klawisza rec.

  • Przenosi posortowane rekordy z pliku roboczego do pliku wyjściowego.

  • Zamyka plik-wejściowy i plik-wyjściowy oraz usuwa plik roboczy.

Example

W poniższym przykładzie INPUT1 i INPUT2 to pliki wejściowe, które mają zostać scalone w kolejności rosnącej -

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 aby wykonać powyższy program w języku 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

Kiedy kompilujesz i wykonujesz powyższy program, daje on następujący wynik -

Merge Successful