COBOL-내부 정렬
파일에서 데이터를 정렬하거나 둘 이상의 파일을 병합하는 것은 거의 모든 비즈니스 지향 응용 프로그램에서 일반적으로 필요합니다. 정렬은 레코드를 오름차순 또는 내림차순으로 정렬하는 데 사용되므로 순차적 처리를 수행 할 수 있습니다. COBOL에서 파일을 정렬하는 데 사용되는 두 가지 기술이 있습니다.
External sortJCL에서 SORT 유틸리티를 사용하여 파일을 정렬하는 데 사용됩니다. JCL 장에서 이에 대해 논의했습니다. 지금은 내부 정렬에 중점을 둘 것입니다.
Internal sort COBOL 프로그램 내에서 파일을 정렬하는 데 사용됩니다. SORT 동사는 파일을 정렬하는 데 사용됩니다.
동사 정렬
COBOL의 정렬 프로세스에서 세 개의 파일이 사용됩니다-
Input file 오름차순 또는 내림차순으로 정렬해야하는 파일입니다.
Work file정렬 프로세스가 진행되는 동안 레코드를 보관하는 데 사용됩니다. 입력 파일 레코드는 정렬 프로세스를 위해 작업 파일로 전송됩니다. 이 파일은 SD 항목의 파일 섹션에 정의되어야합니다.
Output file정렬 프로세스 후에 얻은 파일입니다. Sort 동사의 최종 출력입니다.
통사론
다음은 파일을 정렬하는 구문입니다-
SORT work-file ON ASCENDING KEY rec-key1
[ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.
SORT는 다음 작업을 수행합니다.
IO 모드에서 작업 파일을, INPUT 모드에서 입력 파일을, OUTPUT 모드에서 출력 파일을 엽니 다.
입력 파일에있는 레코드를 작업 파일로 전송합니다.
rec-key에 의해 오름차순 / 내림차순으로 SORT-FILE을 정렬합니다.
정렬 된 레코드를 작업 파일에서 출력 파일로 전송합니다.
입력 파일과 출력 파일을 닫고 작업 파일을 삭제합니다.
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 모드로 엽니 다.
입력 파일에있는 레코드를 작업 파일로 전송합니다.
rec-key에 의해 오름차순 / 내림차순으로 SORT-FILE을 정렬합니다.
정렬 된 레코드를 작업 파일에서 출력 파일로 전송합니다.
입력 파일과 출력 파일을 닫고 작업 파일을 삭제합니다.
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