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