프로그램 내부의 고정 데이터가 아닌, 외부의 실제 텍스트 파일(input.txt)을 읽어와서 가공한 뒤 새로운 결과 파일(output.txt)을 만들어내는 실무 중심의 배치(Batch) 처리 코드를 알아본다.
🟦 1. 외부 파일 매핑과 레코드 정의 (ENV & DATA DIVISION)
물리적인 외부 파일 경로를 연결하는 SELECT 구문과, 파일 내부의 한 줄(Line) 데이터 구조를 선언하는 FD(File Description) 구문을 유기적으로 배치함.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
IDENTIFICATION DIVISION.
PROGRAM-ID. FILE-IO-DEMO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
* -------------------------------------------------------------
* [장치 연결] 외부의 물리적 파일명과 프로그램 내부 명칭을 매핑함 (B영역)
* -------------------------------------------------------------
SELECT IN-FILE ASSIGN TO "input.txt".
SELECT OUT-FILE ASSIGN TO "output.txt".
DATA DIVISION.
FILE SECTION.
* =================================================================
* [파일 구조 선언] FD 구문과 최상위 레코드 01 변수는 A영역(8칸) 시작임
* =================================================================
FD IN-FILE.
01 IN-RECORD.
* [B영역] 입력 파일은 한 줄당 10바이트 크기의 문자열로 가정함
05 IN-DATA PIC X(10).
FD OUT-FILE.
01 OUT-RECORD.
* [B영역] 출력 파일도 동일한 10바이트 크기의 문자열 공간을 확보함
05 OUT-DATA PIC X(10).
WORKING-STORAGE SECTION.
01 SWITCHES.
* [파일 종료 플래그] 파일의 모든 줄을 읽었는지 판단하는 조건 이름 변수
05 EOF-SW PIC X(01) VALUE "N".
88 END-OF-FILE VALUE "Y".
🟩 2. 파일 열기, 읽기, 쓰기 및 닫기 (PROCEDURE DIVISION)
외부 파일을 열고(OPEN), 루프 안에서 한 줄씩 읽어(READ) 파일의 끝(AT END)을 만날 때까지 새 파일에 내용을 쓰는(WRITE) 실행 영역임.
cobol code
12345678901234567890123456789012345678901234567890123456789012345678901234567890
PROCEDURE DIVISION.
MAIN-LOGIC SECTION.
A000-START.
* -------------------------------------------------------------
* [파일 오픈] 읽기용(INPUT)과 쓰기용(OUTPUT) 파일을 각각 개방함
* -------------------------------------------------------------
OPEN INPUT IN-FILE.
OPEN OUTPUT OUT-FILE.
* [첫 줄 읽기] 반복문에 진입하기 전, 첫 번째 데이터를 미리 읽어둠
READ IN-FILE
AT END SET END-OF-FILE TO TRUE
END-READ.
* -------------------------------------------------------------
* [파일 읽기 반복 루프] 파일 끝(Y)을 만날 때까지 돌려줌
* -------------------------------------------------------------
PERFORM UNTIL END-OF-FILE
* [데이터 이동] 입력 파일에서 읽은 내용을 출력 레코드로 복사함
MOVE IN-DATA TO OUT-DATA
* [파일 쓰기] 준비된 OUT-RECORD의 내용을 output.txt에 한 줄 기록함
WRITE OUT-RECORD
* [다음 줄 읽기] 다음 데이터를 읽고, 데이터가 없으면 EOF 플래그를 참(Y)으로 바꿈
READ IN-FILE
AT END SET END-OF-FILE TO TRUE
END-READ
END-PERFORM.
* -------------------------------------------------------------
* [파일 닫기 및 종료] 메모리 누수 방지를 위해 오픈한 파일을 반드시 닫아줌
* -------------------------------------------------------------
CLOSE IN-FILE.
CLOSE OUT-FILE.
STOP RUN.
💡 [실무 팁] 코볼 파일 처리 시 가장 흔하게 내는 2대 대형 에러
텍스트 파일을 다룰 때 문법적 지식이 부족하면 런타임 오류로 인해 시스템이 즉시 셧다운(Abend)됨.
- 1. READ는 '파일명'을 쓰고, WRITE는 '레코드명'을 쓴다
- 코볼의 철칙 중 하나임. READ 명령어 뒤에는 FD 옆에 적은 파일 이름(READ IN-FILE)을 지정해야 함.
- 반대로 WRITE 명령어 뒤에는 01 레벨에 적은 내부 레코드 이름(WRITE OUT-RECORD)을 타겟으로 지정해야 컴파일 에러가 나지 않음.
- 2. CLOSE를 빼먹으면 파일이 깨지거나 잠긴다 (Locking)
- 프로그램이 끝날 때 CLOSE 구문으로 명시해 주지 않으면 하드디스크에 임시 버퍼로 고여있던 데이터가 정상적으로 저장되지 않아 파일이 공백으로 남거나, 프로세스가 파일을 계속 점유하여 강제 종료하기 전까지 다른 프로그램에서 해당 파일을 열 수 없게 됨.
'프로그래밍 > RM-COBOL' 카테고리의 다른 글
| [COBOL 기초] 대량 데이터 정렬(SORT)과 병합(MERGE) 처리를 위한 COBOL code 작성법 (0) | 2026.06.22 |
|---|---|
| [COBOL 기초] 파일 입출력(READ/WRITE)으로 텍스트 파일 제어하는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 반복문(PERFORM UNTIL)으로 대량 데이터 처리하는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 조건문(IF ~ END-IF)으로 합격/불합격 판별하는 COBOL code 작성법 (0) | 2026.06.22 |
| [COBOL 기초] 소수점 편집 마스크(PIC Z, .)와 COBOL code 변환 출력법 (0) | 2026.06.22 |