본문 바로가기
프로그래밍/RM-COBOL

[COBOL 기초] 파일 입출력(READ/WRITE)으로 텍스트 파일 제어하는 COBOL code 작성법

by 오!쎈세! 2026. 6. 22.
프로그램 내부의 고정 데이터가 아닌, 외부의 실제 텍스트 파일(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 구문으로 명시해 주지 않으면 하드디스크에 임시 버퍼로 고여있던 데이터가 정상적으로 저장되지 않아 파일이 공백으로 남거나, 프로세스가 파일을 계속 점유하여 강제 종료하기 전까지 다른 프로그램에서 해당 파일을 열 수 없게 됨.