외부 파일에서 읽어온 뒤죽박죽인 대용량 데이터를 특정 키(Key) 값 기준으로 순서대로 나열하는 SORT 구문과, 이미 정렬된 두 개의 파일을 하나로 합치는 MERGE 구문의 실무 작성법을 알아본다.
🟦 1. 정렬용 특수 작업 파일 선언 (ENV & DATA DIVISION)
코볼에서 정렬을 수행하려면 메모리나 디스크 상에 임시로 데이터를 올려두고 나열할 정렬용 특수 파일(SD: Sort Description)을 선언해 주어야 한다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
IDENTIFICATION DIVISION.
PROGRAM-ID. SORT-MERGE-DEMO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
* -------------------------------------------------------------
* [장치 연결] 원본 파일, 결과 파일, 그리고 정렬용 작업 파일 매핑 (B영역)
* -------------------------------------------------------------
SELECT UN-SORT-FILE ASSIGN TO "unsorted.txt".
SELECT SORTED-FILE ASSIGN TO "sorted.txt".
SELECT WORK-FILE ASSIGN TO "sortwork.tmp".
DATA DIVISION.
FILE SECTION.
FD UN-SORT-FILE.
01 UN-SORT-REC PIC X(20).
FD SORTED-FILE.
01 SORTED-REC PIC X(20).
* =================================================================
* [정렬 파일 정의] FD가 아닌 SD 구문을 사용하며 A영역(8칸)에서 시작함
* =================================================================
SD WORK-FILE.
01 WORK-RECORD.
* [B영역] 정렬의 기준(Key)이 될 학번 또는 사원번호 공간 정의
05 SRT-KEY-ID PIC 9(05).
* [B영역] 나머지 잔여 데이터 공간 정의
05 SRT-DATA PIC X(15).
🟩 2. SORT 구문을 활용한 고속 정렬 실행 (PROCEDURE DIVISION)
정렬 명령 한 줄로 원본 파일을 읽어 작업 파일에서 나열한 뒤, 최종 파일에 저장하는 전 과정을 컴퓨터가 자동으로 처리해 준다.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
PROCEDURE DIVISION.
MAIN-LOGIC SECTION.
A000-START.
DISPLAY "--- SORT PROCESS START ---".
* -------------------------------------------------------------
* [COBOL code 정렬 명령] 원본을 읽어 학번 오름차순으로 정렬 후 저장함
* -------------------------------------------------------------
SORT WORK-FILE
ON ASCENDING KEY SRT-KEY-ID
USING UN-SORT-FILE
GIVING SORTED-FILE.
* -> ASCENDING: 오름차순 (작은 값 -> 큰 값 순 정렬)
* -> DESCENDING 구문을 쓰면 내림차순 정렬로 변경됨.
* -> USING에 원본 파일을, GIVING에 최종 결과 파일을 지정함.
* -> ⚠️ 주의: SORT 구문은 내부에서 OPEN/CLOSE를 자동 수행하므로 별도로 열면 안 됨.
DISPLAY "--- SORT PROCESS END ---".
STOP RUN.
💡 [실무 팁] 정렬(SORT)과 병합(MERGE)의 결정적 차이점
두 구문은 문법 구조가 매우 유사하여 초보 개발자들이 혼동하기 쉽지만, 내부 메커니즘과 목적이 완전히 다름.
- SORT (정렬)
- 조건: 원본 파일의 데이터가 어떤 순서로 꼬여있든 상관없음.
- 역할: 뒤죽박죽인 무작위 파일을 넘겨받아 처음부터 끝까지 재배치하여 완벽한 순서로 나열해 줌.
- MERGE (병합)
- 조건: 합치고자 하는 두 개 이상의 원본 파일들이 이미 사전에 동일한 키 값으로 정렬되어 있어야만 함.
- 역할: 이미 정렬된 A파일과 B파일을 셔플 하듯 순서에 맞춰 지퍼처럼 맞물려 하나의 파일로 합쳐주는 역할임. 만약 정렬되지 않은 파일을 MERGE하면 정렬 순서가 완전히 깨지는 치명적인 데이터 오류가 발생함.
- MERGE 구문 예시
cobol code
MERGE WORK-FILE ON ASCENDING KEY SRT-KEY-ID USING SORTED-FILE-A SORTED-FILE-B GIVING MERGED-TOTAL-FILE.
'프로그래밍 > RM-COBOL' 카테고리의 다른 글
| [COBOL 기초] 특수 제어문(STRING, EVALUATE)으로 가독성을 높이는 COBOL code 작성법 (0) | 2026.06.22 |
|---|---|
| [COBOL 기초] 서브 프로그램 호출(CALL ~ USING)과 데이터 연동 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 파일 입출력(READ/WRITE)으로 텍스트 파일 제어하는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 파일 입출력(READ/WRITE)으로 텍스트 파일 제어하는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 반복문(PERFORM UNTIL)으로 대량 데이터 처리하는 COBOL code 작성법 (0) | 2026.06.22 |