1. COBOL의 구조

 COBOL PROGRAM - 부(DIVISION) - 절(SECTION) - 소절(paragraph) - 문장(SENTENCE),항(ENTRY) - 명령(STATEMENT),구절(CLAUSE) - 단어(WORD) - 문자(CHARACTER)

 4개의 DIVISION은 IDENTIFICATION, ENVIRONMENT, DATA, PROCEDURE   DIVISION이다.

 

 

2  COBOL의 6대 구성 요소

요소 예약어
예약어 예약어는 점유 단어라고도 한다. 코볼 컴파일러에 의미가 정해져 있는 단어이다. 사용자 단어는 사용할 수 없다.
사용자 단어 영문자,숫자, -(HYPHEN)를 사용한다. 하이픈은 단어의 처음과 마지막에 사용할 수 없다.  최대 길이는 30자 까지이다. 예약어는 사용할 수 없다. 첫 글자는 반드시 영문자, 처리부에서는 숫자로만 구성할 수 있다.
리터럴 문자리터럴은 따옴표로 묶어서 표현하며, 최대 120글자 이내이며, 어떠한 문자도 사용할 수 있다.
계층 번호 프로그램 내에서 취급되는 데이터의 구조를 설명하기 위하여 레코드와 레코드에 종속되는 항목들 또는 독립 항목에 붙이는 번호이다.  이들은 항목간의 상하, 좌우 관계를 표시한다.
PICTURE 데이터의 크기와 성격을 표시한다.
기호 뜻이 정해진 부호

 

 

3. IDENTIFICATION DIVISION

○ IDENTIFICATION DIVISION은 반드시 기술해야 하며 프로그램 이름을 비롯한 몇 가지의 내용들로 구성된다. 아래와 같은 7개의 Paragraph으로 구성되며 이 중 PROGRAM-ID. 은 반드시 기술해야하며 나머지는 생략가능하다.  프로그램의 문서적인 기능을 나타내주는 DIVISION이다.

     PROGRAM-ID.					프로그램 이름.
     [AUTHOR.					작성자 이름.]
     [INSTALLATION				설치 장소에 관한 정보.]
     [DATE-WRITTEN.				작성 일자.]
     [DATE-COMPILED.				번역 일자.]
     [SECURITY.					비밀 사항.]
     [REMARKS.					참고 사항.]


 사용 예시)
      IDENTIFICATION				DIVISION.
      PROGRAM-ID.				XXTEST.
      AUTHOR.					張星九.
      INSTALLATION.				KDN.
      DATE-WRITTEN.				1998.09.02.
      DATE-COMPILED.				1998.09.02
      SECURITY.					NONE
      REMARKS.					이것은 예제 프로그램 입니다.

(1) PROGRAM-ID Paragraph
  프로그램 이름을 기술하며 이름은 사용자가 임의로 지정할 수 있다. 프로그램 이름은 30자를 초과할 수 없다.  또한 반드시 기술해야 하며 다른 PROGRAM-ID와 중복되었을 경우는 다른 프로그램과 연결시(Link)킬 때 문제가 생기므로 주의해야 한다.

(2) AUTHOR   Paragraph
  프로그램 작성자의 이름을 기술하며 생략가능하다.  참고로 한글이나 한자도 가능하다.

(3) INSTALLIATION  Paragraph
  컴퓨터가 설치되어 있는 장소와 관련된 내용을 기술하며 생략가능하다.  보통 회사의 이름이 들어간다.

(4) DATE-WRITTEN  Paragraph
  프로그램 작성일자를 기술하며 생략 가능하다.

(5) DATE-COMPILED Paragraph
  프로그램 Compile 일자를 기술하며 생략 가능하다.

(6) SECURITY  Paragraph
  프로그램 관리에 주의사항이나 참고사항을 기입하며 생략가능하다.

(7) REMARKS  Paragraph
  주석문을 사용하는 Paragraph으로 생략 가능하며 SECURITY Paragraph와 사용법이 같다.

 

 

 

4. ENVIRONMENT DIVISION

○ ENVIRONMENT DIVISION은 프로그램이 실행될 주변 환경을 설정한다.  즉, 프로그램이 작성되어지는 컴퓨터 기종과 프로그램이 컴파일되어 실행되어지는 기종을 명시하는 CONFIGURATION SECTION과 입.출력 파일이 어떤 장치에 연결되어 있는가를 설정하는 INPUT-OUTPUT SECTION을 기술한다.

ENVIRONMENT					DIVISION.
[CONFIGURATION					SECTION.]
[SOURCE COMPUTER.				컴퓨터 이름.]
[OBJECT-COMPUTER.				컴퓨터 이름.]
[SPECIAL-NAMES.					특별이름 항목 ....] ].
[INPUT-OUTPUT					SECTION.
FILE-CONTROL.					문장.
I-O-CONTROL.					입.출력 제어문 항목. ]


사용 예시)
       ENVIRONMENT				DIVISION.
       CONFIGURATION				SECTION.
       SOURCE-COMPUTER.			PC.
       OBJECT-COMPUTER.			PC.
       SPECIAL-NAMES.				CURRENCY SIGN IS "₩".
       INPUT-OUTPUT				SECTION.
       FILE-CONTROL.
					SELECT  IN-F  ASSIGN TO INPUT "SAMPLE.DAT".

 

(1) CONFIGURATION SECTION.

1)  SOURCE-COMPUTER  Paragraph
    프로그램이 작성되어 컴파일 할 컴퓨터의 기종을 기술하며 생략 가능하다.

2)  OBJECT-COMPUTER  Paragraph
    컴파일된 프로그램을 실행하는 컴퓨터의 기종을 기술하며 생략가능하다.

3) SPECIAL-NAMES  Paragraph

        SPECIAL-NAMES.
                  [ switch-name [ IS mnemonic-name ]
                     ON STATUS IS condition-name-1
                     [ OFF STATUS IS condition-name-2 ]
                     OFF STATUS IS condition-name-2
                     [ ON STATUS IS condition-name-1  ]
                     [ALPHABETalphabet-name-1 IS
                                         STANDARD-1
                                         STANDARD-2
                                         NATIVE
                    [ CURRENCY SIGN IS literal ]
                    [ DECIMAL-POINT  IS  COMMA. ]  ]

○  switch-name은 switch-1, switch-2, switch-3, ... , switch-8 중 하나이다.
○  alphabet-name은 주석으로 처리된다.
○  CURRENCY SIGN IS literal에서 리터럴은 1문자로 제한되어 있으며 화폐기호를 나타내기 위해서 사용된다.
○  다음 문자들은 화폐기로로 지정할 수 없다.
     숫자 :  0 ~ 9  ,  영문자 : A,B,C,D,L,P,R,S,V,X,Z,공란(SPACE),    특수문자 : *,+,-, , , ; , (, ), /, =
○  우리나라 화폐기호 원(₩)을 RM/COBOL에서 사용하기 위해서는 아래와 같이 기술해야 한다.

     SPECIAL-NAMES.
                CURRENCY   SIGN IS  "₩".

 

(2) INPUT-OUTPUT SECTION
○  INPUT-OUTPUT SECTION은 FILE-CONTROL , I-O CONTROL Paragraph으로 구성되며 프로그램이 실행될 때 data 전송과 처리에 필요한 정보를 제공하여 준다.
  * 사용되는 파일이 없으면 생략해도 된다.

형식1) 순차파일
INPUT-OUTPUT      SECTION.
 FILE-CONTROL.
    SELECT file-name ASSIGN TO INPUT  "데이터 파일 이름"
                     OUTPUT              data-name-1
                     INPUT-OUTPUT
                     I-O
                     PRINT
                     RANDOM
                  [  ORGANIZATION  IS  {  LINE SEQUENTIAL }
                                           { BINARY                  }
                   [ ACCESS MODE IS   {  SEQUENTIAL  }
--------------------------------------------------------------------
형식2) 상대파일
INPUT-OUTPUT      SECTION.
 FILE-CONTROL.
    SELECT  file-name  ASSIGN   TO   RANDOM             "데이터 파일 이름"
                  ORGANIZATION   IS  RELATIVE
               [ ACCESS MODE IS    {  SEQUENTIAL  }
                                                 { RANDOM         }
                                                  { DYNAMIC        }
                RELATIVE KEY IS    data-name-2
                [ FILE STATUS IS   data-name-3 ]
--------------------------------------------------------------------
형식3) 색인파일
INPUT-OUTPUT      SECTION.
 FILE-CONTROL.
    SELECT  file-name  ASSIGN   TO   RANDOM               "데이터 파일 이름"
                  ORGANIZATION   IS  INDEXED
               [ ACCESS MODE IS    {  SEQUENTIAL  }
                                                 { RANDOM         }
                                                  { DYNAMIC        }
                RECORD KEY IS    data-name-2
                [ FILE STATUS IS   data-name-3 ]
--------------------------------------------------------------------
사용 예시)
        ENVIRONMENT DIVISION.
        INPUT-OUTPUT SECTION.
        FILE-CONTROL.
            SELECT IN1-F        ASSIGN TO INPUT "980815.DAT".
            SELECT IN2-F        ASSIGN TO INPUT "980816.DAT"
                                          ORGANIZATION IS LINE SEQUENTIAL.
            SELECT SORT-F  ASSIGN TO DISK.
            SELECT OUT-F    ASSIGN TO OUTPUT "980814.OUT".
            SELECT PRT1-F    ASSIGN TO PRINT "980814.PRT".
            SELECT PRT2-F    ASSIGN TO PRINT "PRINTER".
         DATA DIVISION.

○   FILE-CONTROL Paragraph
   사용하고자 하는 각각의 파일에 파일 이름을 지정하며 파일과 관련한 다른 정보를 기술한다.   

순차파일 기술방법(형식1)
순차파일은 레코드가 순차적으로 파일에 저장되며, 레코드를 읽어 들일 때 입력되어진 순서대로만 읽을 수 있는 파일이다.  일단 파일이 만들어진 후 레코드를 추가하려면 파일의 맨뒤에 추가시켜야 한다.
RM/COBOL에서 사용하는 순차화일은 LINE SEQUENTIAL 과 BINARY SEQUENTIAL 2가지이며 각각의 논리 레코드(Logical record)가 가질 수 있는 최대 길이는 65535Byte 이다.
LINE SEQUENTIAL FILE
  행 순차화일로서 데이터 파일내의 레코드가 행 단위로 입력되어 있는 형태의 파일을 말하며 이 파일의 데이터는 사용자가 Text Editor(예:TGEDIT,EDIT,EDLIN,PE2, SIDEKICK, QE)를 직접입력하여 만들 수도 있다.
  사용 예는 위에서와 같이 기술하며 즉
<< SELECT IN2-F        ASSIGN TO INPUT "980816.DAT"  ORGANIZATION IS LINE SEQUENTIAL. >>
  와 같이 기술한 경우에 해당된다.
BINARY SEQUENTIAL FILE
 이진 순차화일로서 행 순차화일은 각각의 레코드가 carriage return 이나 Lline feed 등에 의하여 레코드가 행 단위로 구분되어 있지만 이진 순차화일은 각 레코드가 행 구분이 없이 carriage return이나 line feed도 데이터(레코드)로 취급되는 형태의 파일구조를 말한다.  잘못하면 모든 데이터가 2자리씩 밀 리는 현상이 발생하므로 주의해야 한다.
-1- SELECT 구  :   SELECT 구는 맨 처음 반드시 기술해야 하며 SELECT구 다음 기술사항들은 순서에 상관없다.  SELECT 구에서 지정된 파일이름은 DATA DIVISION에서 FD로 기술하는 파일이름과 같아야 한다.

-2- ASSIGN 구 : 사용하고자 하는 파일이 어떤 장치에 연결되어 있는가를 기술하며 장치 형태는 기능에 따라 INPUT, OUTPUT, INPUT-OUTPUT, PRINT, RANDOM 중에서 하나를 기술한다.  "데이터 파일이름"은 30자 이내로 해야 하며 반드시 따옴표(" ")로 둘러싸야 한다. data-name-1은 DATA DIVISION에서 영숫자 항목(X MODE)로 정의되어야 한다.

-3- ACCESS MODE 구 : 레코드를 읽거나 쓰는 순서를 나타내는데 순차화일에서는 SEQUENTIAL로만 처리한다. 만약 생략한다면  ACCESS MODE IS SEQUENTIAL으로 처리된다.

-4- FILE STATUS 구 : 파일의 입출력 작업이 이루어지는 상태를 data-name-2에 어떤 값으로 기억하며 이때, data-name-2는 WORKING-STORAGE SECTION에 영숫자 항목(X MODE) 2자리로 정의되어 있어야 한다.

 

색인(INDEX) 화일 기술방법(형식3)
- 색인(INDEX) 파일이란 사용자가 지정한 레코드 키(KEY)에 의하여 각각의 레코드를 구분한다.  색인화일은 데이터가 기록되는 데이터 파일과 레코드 키 만을 따로 모아놓은 인덱스(index) 파일로 구성되며 RM/COBOL 에서는 색인화일과 데이터화일이 한 파일로 구성되는 경우도 있다.

- 색인화일은 입력 순서에 관계없이 키 값의 크기 순서에 따라 항상 오름차순(1234...9)으로 정렬되어 인덱스를 구성하고 데이터 레코드는 입력된 순서대로 저장된다.

- 따라서 색인화일은 순차(Sequential), 비순차(Random), 순차 비순차(Dynamic)적으로 레코드를 접근할 수 있다.  또한 색인화일의 키는 단순히 하나의 키만을 지정하여 레코드를 접근하는 형태와 Alternate키를 지정하여 서로 다른 여러개의 키로 레코드를 접근할 수 있는 형태로 구분한다.
-1- SELECT, FILE STATUS 구는 순차화일과 기술방법이 똑 같다.

-2- ASSIGN 구 : 순차화일과 같은 방법으로 기술하는데 장치 형태는 반드시 RANDOM으로 기술해야만 한다.  

-3- ORGANIZATION 구 : 데이터 파일이 어떠한 형태로 형성되어 있는가를 기술하며. ORGANIZATION은 INDEXED로 기술된다.

-4- ACCESS MODE 구 : 레코드를 읽거나 쓰는 순서를 나타내는데 순차화일인 경우는 오름차순으로 처리된다.  RANDOM일 경우는 레코드 키에 의하여 레코드의 내용을 접근할 수 있다.  DYNAMIC인 경우는 앞의 2가지 경우의 처리가 가능하다.  생략하는 경우에는 ACCESS MODE IS SEQUENTIAL로 지정된다.

-5- RECORD KEY구 : 파일을 접근할 때 주요 레코드 키를 지정하며 이 키가 인텍스 파일속에 있는 레코드들의 접근할 수 있는 경로를 제공한다.

-6- ALTERNATE RECORD KEY 구 : 파일에 대한 대체 레코드 키를 나타내며 이 키가 색인 파일속에 있는 레코드들의 대체 접근할 수 있는 경로를 제공한다. 대체할 수 있는 키는 14개 까지 가능하다.

-7- WITH DUPLICATES구 : 대체 키가 파일내의 다른 키와 중복될 수 있음을 나타내며 WITH DUPLICATES가 기술되지 않으면 대용 키는 중복되어서는 안된다.

 

○   I-O-CONTROL Paragraph
   이 구는 서로 다른 파일들을 메모리 영역을 공유시키거나 재수행(RERUN)되는 내용, 다중화일 장치의 파일 위치등을 명시한다. 보조기억장치 사용시 입.출력 관리를 위하여 기술한다.

형식)
 I-O-CONTROL.
   [  RERUN ON  [  file-name-1  ]
                   EVERY   { END OF    { REEL / UNIT }  /  {  integer-1   RECORDS  } OF file-name-2 ]
    [ SAME { RECORD / SORT } AREA FOR fine-name-3 ... ]
    [ MULTIPLE FILE TAPE CONTAINS fine-name-4 POSITION integer-2 ]

-------------------------------------------------------
사용 예제)
-------------------------------------------------------
        I-O-CONTROL
               RERUN  EVERY  2000  RECORDS OF  FILE-01.
// FILE-01을 처리하는데 매 2000개의 레코드가 처리될 때 마다 그 결과를수록 한다.
 -------------------------------------------------------
       I-O-CONTROL
               RERUN  EVERY  END OF REEL OF TAPE-F.
// 여러개의 REEL로 구성된 TAPE-F 파일을 처리할 때 매 REEL이 처리될 때마다 그 결과를 수록한다.
-------------------------------------------------------
      I-O-CONTROL
               SAME   RECORD  AREA  FOR  FILE-1 FILE-2 FILE-3 .
// FILE-1, FILE-2, FILE-3의 데이터 레코드 영역이
// 주기억장치에 동일한 구역으로 확보되어 공동으로 사용된다는 의미이다.
// 그러나 FILE-1,FILE-2,FILE-3의 데이터 레코드는 각각 별도로 작성된다.
-------------------------------------------------------
INPUT-OUTPUT               SECTION.
       FILE-CONTROL.
           SELECT  A-MAST-VSAM    ASSIGN  TO        VSAMMSTR
                                  ACCESS            SEQUENTIAL
                                  ORGANIZATION  IS  INDEXED
                                  RECORD  KEY   IS  A-MAST-KEY.
           SELECT  A-RANDOM-VSAM  ASSIGN  TO        VSAMFILE
                                  ACCESS            RANDOM
                                  ORGANIZATION  IS  INDEXED
                                  RECORD  KEY   IS  A-RANDOM-KEY.
       I-O-CONTROL.
           SAME  RECORD  AREA  FOR  A-MAST-VSAM  A-RANDOM-VSAM.
       DATA                       DIVISION.
       FILE                       SECTION.
       FD  A-MAST-VSAM
           LABEL   RECORD         STANDARD
           BLOCK   CONTAINS   10  RECORDS
           RECORD  CONTAINS  1000  CHARACTERS.                 
       01  A-MAST-VSAM-REC.
           03  A-MAST-KEY.
               05  A-MAST-CUST    PIC X(10).
           03  A-MAST-DATA        PIC X(990).
       PROCEDURE                   DIVISION.
       0000-START.
            OPEN    I-O     A-MAST-VSAM A-RANDOM-VSAM.
            ....
           REWRITE  A-MAST-VSAM-REC  FROM  WK-MAST-REC .
           WRITE  A-MAST-VSAM-REC  FROM  WK-MAST-REC .
           CLOSE   A-MAST-VSAM A-RANDOM-VSAM.
           STOP   RUN.

 

- RERUN 절
   어떤 파일을 처리함에 있어서 장시간을 요구할 때 처리도중 필요로 인하여 처음부터 다시 작업을 해야하는 경우가 생기는데 처리도중 일정한 중간 결과를 지정된 파일에  수록해 둠으로써 차후에 최종적으로 수록한 시점부터 다시 작업 할 수 있도록 하기위한 조치이다.

- SAME AREA 절
   주기억 장치의 기억장소를 절약하기 위하여 서로 다른 여러개의 파일에 대한 데이터 레코드가 기억장소를 공유하고자 할 때 사용한다. SAME SORT AREA절이 사용되면 파일중에 적어도 하나는 SORT나 MERGE 파일로 표현 되어야 한다.

 

 

5. DATA DIVISION


 (1) FILE SECTION

○   ENVIRONMENT DIVISION의 FILE-CONTROL절에서 선언한 입.출력 파일과 레코드에 대하여 설명하는 부분으로 DATA DIVISION에서 맨 처음 기술한다.  즉 파일을 구성하는 레코드 이름, 논리적.물리적 레코드 크기, 레코드의 레이블 지정등을 정의한다. FILE에 관한 설명과 레코드 구조, 레코드에 있는 각 항목의 성격과 크기를 기술한다.

파일 코딩 용지의 A 영역에 기술하며, 파일에 대한 설명을 기술한다.
레코드 레코드 각 항목들의 구조와 이름, 성격, 크기 등을 기술한다.
PICTURE 데이터의 크기와 성격을 기술한다.
숫자는 9(최대 18자리), 영숫자는 X(최대 120자) MODE로 기억된다.
FILE SECTION 사용 형식)
     FILE                             SECTION.
     FD   file-name
           [  LABEL   RECORD(S) { IS / ARE }  {  STANDARD / OMITTED }  ]
           [  BLOCK  CONTAINS integer-1   TO integer-2  {  RECORDS /  CHARACTERS }   ]
           [  RECORD CONTAINS integer-3  TO  integer-4    CHARACTERS  ]
           [  DATA     RECORD(S)  { IS / ARE  } data-name-1 data-name-2 ...    ]
--------------------------------------
사용 예시)
     ** 주의 : PIC 정의시에는 VALUE 구를 사용할 수 없습니다.
       FD IN-F.
       01 IN-R.
            03 FILLER  PIC X(01) .



(1)  파일 기술 항목
- FD(File Description) 문은 ENVIRONMENT DIVISION의 SELECT문에서 정의한 파일들에 대한 설명의 시작을 나타내며 FD 다음에는 파일 이름을 기술해야 한다. 그리고 이 파일이름은 SELECT문에서 정의된 파일이름과 같아야 하며 갯수도 같아야 한다.

1) LABEL RECORD
    기술된 파일의 레이블이 표준 레이블인가 아닌가를 정의하는 것으로 테이프 파일이나 디스크 파일처럼 레이블이 존재하는 장치에는 STANDARD로 기술하고 프린터 파일이나 카드 파일처럼 레이블이 존재하지 않은 장치에는 OMITTED로 기술한다.  그러나 생략해도 된다.

2) BLOCK CONTAINS
    물리적 레코드의 크기를 정의한다.  즉 하나의 BLOCK에 들어가는 레코드 수, 또는 문자 수를 숫자로 표시하며 interger-1, integer-2가 동시에 지정되면 BLOCK의 크기가 가변적임을 나타낸다. 그러나 integer-2 만 기술되면 BLOCK의 크기가 일정함을 나타낸다. 생략하면 BLCOK의 크기는 하나의 논리적 레코드 크기가 된다.

3) RECORD CONTAINS
   하나의 레코드가 몇 바이트로 구성되어 있는가를 표시한다. 생략하면 레코드 기술항목 부분에서 기술된 길이대로 지정된다. 논리적 레코드는 한번에 입.출력되는 단위를 말한다.  integer-3, integer-4가 모두 지정되면 레코드 길이가 가변적인 것을 의미하며 integer-3은 최소 레코드 길이, integer-4는 최대 레코드 길이를 지정한다.  integer-4 만 기술되면 레코드 길이가 일정함을 나타낸다.

4) DATA RECORD
   파일을 구성하고 있는 데이터 레코드의 이름을 정의한다.  한 파일 내에서 서로 다른 레코드의 이름을 지정하면 영역을 공유하며 각 레코드들은 서로 다른 형식을 가져도 되지만 각 레코드들의 크기는 같아야 한다.  생락하면 레코드 기술항목 부분에서 기술된 레코드 이름이 지정된다.  

    FD  IN-F
           DATA RECORDS ARE IN-1 IN-2
    01 IN-1.
         ...
     01 IN-2.
          ...

 


(2)  레코드 기술 항목
- 레코드 기술 항목은 논리 레코드의 특성, 레벨 번호, 각 항목의 구조와 이름, 성격 및 크기를 정의한다.

** 레코드 기술 형식)
 레벨넘버 { 항목이름-1 / FILLER / FIL }
       [  REDEFINES  항목이름-2  ]  [ { PICTURE / PIC }   IS 문자열(string) ]
       [ { COMPUTATIONAL / COMP / BINARY } ]
       [ [ USAGE IS ] { COMP-1 / COMP-2 / COMP-3 ] / DISPLAY / INDEX  } ]
      [  [ SIGN IS ] { LEADING / TRAILING } [ SEPARATE CHARACTER ] ]
      [ OCCURS { integer-1 TO integer-2 TIMES DEPENDING ON 항목이름-3 /
                          integer-1 TIMES  }
                     { ASCENDING / DESCENDING } KEY IS 항목이름-4  
                       [ INDEXED BY 인덱스이름-1 인덱스이름-2 ... ]
      ]
     [ { SYNCHRONIZED / SYNC  } { LEFT / RIGHT } ]
       [  { JUSTIFIED / JUST }  RIGHT ]
     [ BLANK WHEN ZERO ] [ VALUE IS  literal  ]

** -------------------------------------
** 사용 예시)
           01 IN-R.
              03 FILLER   PIC   X(01)   VALUE  SPACE.
** -------------------------------------
           01  T-DATA-TBL.                                                  
                 03  T-DATA-ROOM              OCCURS  20.                     
                        05  T-OFFICE-NO          PIC X(04).                      
                        05  T-CODE-VALUE       PIC 9(005).          
** -------------------------------------
 WORKING-STORAGE            SECTION.                              
      77   JJ            PIC 9(03)   VALUE  0.      
      01  W-OFFC-TABLE.                                                
            03  W-OFFC-TBL OCCURS  50  TO 150  DEPENDING  ON  JJ.
                  05  W-OFFC            PIC X(03).                            
                  05  W-SU-HO         PIC 9(07).                            
                  05  W-TOT-HO       PIC 9(08).


1) 레벨 넘버(LEVEL-NUMBER)
- 계층번호라고도 하며 논리적 레코드를 구성하는 항목들의 계층적 구조를 나타내며 사용할 수 있는 번호는 01-49,66,77,88 가 있다.
- 88 LEVEL-NUMBER : 조건변수와 관련된 조건이름(condition-name) 부여시에 사용한다.
- 레벨 넘버 01은 하나의 레코드를 대표할 때 주로 사용하며 레코드가 세분된 하위의 항목(Elementary-Item)에서는 02부터 49번까지 사용된다.  레벨 넘버는 세분되어질수록 그 값이 커지며 연속된 번호가 아니라도 된다.
- 레벨 넘버 77은 레코드에 속하지 않는 독립된 항목에 표시하며 WORKING-STORAGE SECTION이나 LINKAGE SECTION에서만 사용된다.

** 레벨 넘버(LEVEL-NUMBER) 예제
       77 AVE-PUNGKA PIC 9(3).
            88 AVEA  VALUES  90  THRU  100.
            88 AVEB  VALUES  80  THRU   89.
            88 AVEC  VALUES  70  THRU   79.
            88 AVED  VALUES  60  THRU   69.
            88 AVEF  VALUES    0  THRU   59.
        ...

***** 평균에 따라서 ABCDF등급을 화일에 출력 88 LEVEL NUMBER 적용.
            MOVE LINE-AVE TO AVE-PUNGKA.
            EVALUATE TRUE
               WHEN  AVEA    MOVE 'A우수' TO O-PUNGKA
               WHEN  AVEB    MOVE 'B보통' TO O-PUNGKA
               WHEN  AVEC    MOVE 'C부족' TO O-PUNGKA
               WHEN  AVED    MOVE 'D열심' TO O-PUNGKA
               WHEN  AVEF    MOVE 'F권총' TO O-PUNGKA
               WHEN OTHER  MOVE '기타 ' TO O-PUNGKA
            END-EVALUATE.
           ...


2) 항목이름 및 FILLER
- 항목이름은 기술되는 데이터의 이름으로 사용자가 규칙에 맞추어 임의적으로 부여한다.  
- FILLER 는 항목의 이름이 필요하지 않은 데이터에 부여하는 것으로 생략할 수도 있다. 사용되는 모든 레벨넘버에 부혀할 수 있고 FIL로 기술해도 된다.
 

(2) WORKING-STORAGE SECTION
 - 연산에 필요한 기억 장소나 출력에 필요한 기억 장소들을 정의한다.  프로그램 수행 중에 임시로 저장하고자 하는 파일의 영역이나 연산 및 출력 영역등과 같은 어떠한 파일에 종속되지 않고 사용되는 기억장소들을 할당하는데 사용한다.

 ** WORKING-STORAGE          SECTION  사용 형식
   WORKING-STORAGE          SECTION
  77  data-name-a
  77  data-name-b
  01  data-name-1
  01  data-name-2
  01  record-name-1
        03  data-name-11
             05  data-name-111
              ...

 

1) 독립 항목(Independent item)의 설정
  다른 항목과 종속 관계가 없이 단독으로 사용되는 항목을 독립 항목이라고 하며, 계층 번호는 77로 부여한다.  77로 지정된 항목을 조건변수(레벨넘버 88)로 사용할 수도 있다. 일반적으로 독립 항목은 WORKING-STORAGE SECTION에서 가장 먼저 기술한다.  

** 독립 항목 예제
   WORKING-STORAGE          SECTION
   77  WK-CNT        PIC   9(06)  VALUE   0.
   77  END-OF-FILE   PIC   X(03)  VALUE SPACE.

 -  VALUE 구
WORKING-STORAGE SECTION에서 확보하는 기억 장소에 초기값을 지정시키는 구이다. 초기값 지정시 PICTURE와 리터럴의 성격이 같아야만 한다.

2) 레코드 항목(Group Item), 그룹 항목
- 입.출력과 관련된 레코드를 기술하는 것으로 데이터 항목들이 계층적 구조를 갖는 그룹항목(Group Item)을 말한다.

** WORKING-STORAGE SECTION 사용 예제
       WORKING-STORAGE  SECTION.
        77  I                          PIC   9(03).
        77  TOT-CNT            PIC   9(07).
        77  EOF-STATUS      PIC   X(03) VALUE SPACE.
               88  EOF              VALUE  'EOF'.
       **  아래의 예가 그룹항목(Group Item)
        01  HEAD-LINE.
              03  FILLER           PIC X(80) VALUE ALL '-'.

 

3) PICTURE / PIC 기호
  기억될 데이터 항목의 성격과 크기 및 편집할 때 요구되는 사항을 기술하며 약속된 기호로 표시한다. 사용되는 기호는 기억형 기호와 편집형 기호로 구분한다. PICTURE/PIC 구는 Group-Item에 대해서는 사용하지 않고 Elementary-Item에 대해서만 사용한다.  단, 세분되지 않은 Group 항목은 예외이다.

** 사용형식
      레벨넘버     data-name [ PICTURE / PIC ] [ IS ] Mode        
** ---------------------------------
** 사용 예
       01              WK-REC                  PIC                    X(001) .

-> X (영숫자 표시 기호) Mode
 영문자,숫자,특수문자등 컴퓨터에서 사용하는 모든 문자를 기억할 수 있는 Mode이다. 가장 많이 사용되는 Mode이다. X 하나가 기억 장소 1 BYTE를 의미한다. 수치를 기억할 수 있으나 문자형태이므로 연산에 사용될 수 없다.  기억되는 순서는 왼쪽에서 오른쪽 방향이며 기억장소의 크기가 실제 기억되는 데이터보다 크면 오른쪽의 남는 부분에는 공백(Blank)이 채워지며 반대로 기억장소의 부족시에는 데이터의 오른쪽 부분이 모자라는 만큼 기억되지 않는다.

데이터 PICTURE 기억결과 비고
MAST X(07) MAST□□□  
KDN X(5) KDN□□  
SUPER XXX SUP 자리수 부족으로 ER이 잘림

 

(가) 연산을 위한 PICTURE
 - 숫자표시기호 ( 9 Mode )
   숫자를 기억시키기 위한 기호, 18자리 이내의 숫자만 사용가능하다, 9 하나가 기억장소 1 byte를 의미한다.
   기억되는 형태는 오른쪽에서 왼쪽 방향이며 기억 장소의 크기가 실제 기억되는 값보다 크면 왼쪽의 남는 부분에는 0 이 채워지며 반대로 기억장소의 부족시에는 값의 왼쪽부분이 모자라는 만큼 기억되지 않는다. 데이터가 연산에 사용되려면 9로 정의된 기억장소가 확보되어야 한다.  숫자 기억형[ 9 MODE] 과 같이 사용되는 연산을 위한 부호에는 S, V, P의 3가지가 있다.
   ①  S : 9 MODE의 왼쪽에 기술하며 기억되는 값이 양수, 음수인가를 표시하며 자리수에는 포함되지 않는다.

   03     A       PIC      9(3).       ** A= □□□
   03     B       PIC      S9(3).       ** B= □□□
   03     C       PIC      S9(4).        ** C= □□□
  MOVE      -130     TO     A     B.      ** A=  130  양수,   B=130  음수
  MOVE       135      TO     C.          ** C=  0135  양수

숫자 기억형[9 MODE]에 'S' 부호가 기술되지 않으면 음수를 기억시켜도 양수를 기억하게 되므로 기억 장소에 음수값을 갖게 하는 경우에는 반드시 S 부호를 PICTURE 왼쪽에 사용하여야 한다.                               

 

  ② V : 숫자 내에 존재하는 소수점을 표현하기 위해 사용되며 자리수에는 포함되지 않는다. 소수점을 나타내기 위해서 "."을 사용했다면 연산을 할 수 없다. V 는 하나만 기술해야 한다. 데이터의 기억은 V 기호를 기준으로 하여 정수부분은 오른쪽에서 왼쪽으로 소수 부분은 왼쪽에서 오른쪽으로 기억된다.

   03     A       PIC      9(3)V9.			** A= □□□ . □      . : 소숫점의 위치
   03     B       PIC      99V99.			** B= □□ . □□
  MOVE    253.2    TO     A.				** A=   253.2
  MOVE    25.32     TO    B.				** B=   23.23
데이터 PICTURE 기억결과 비고
1234 9(4)V99 1234^00  
567.8 99V9(3) 56^780 정수부 자리수 부족
1.234 99V99 01^23 소수부 자리수 부족
6.7A 9(5)V9 ERROR발생 문자가 있음

③ P : 숫자 외에 존재하는 소수점을 표시하기 위해 사용된다.  실제 자리수는 차지하지 않는다.  숫자 오른쪽이나 왼쪽에만 표시가 가능하다. P 기호가 9 기호의 왼쪽에 있으면 P 기호가 있는 자리에 9가 기술된 것으로 간주한다. V Mode 와 같이 사용할 수 없다.

   03     A       PIC      SPPP9(3).     ** A= .  000□□□       . : 소숫점의 위치
   03     B       PIC      S9(3)PP.          ** B= □□□□00.
  MOVE      -123     TO     A.        ** A=  .000123
  MOVE       456       TO    B.         ** B=   45600.

 

(나) 편집을 위한 기호(Editing Symbols)
  주기억 장치 내에 기억되어 있는 내용을 출력시킬 때 출력 형태에 따라 적당한 형태로 출력시킬 필요가 있다.  즉, 기억된 내용은 그대로 출력시키기 위해 사용되는 기호를 말한다.
- 편집에 사용되는 기호의 수만큼 자리수를 차지한다.
- 편집이 된 숫자 기억형 기억 장소를 연산식에 사용할 수 없다.

① , (COMMA)
- 숫자 사이에 삽입하기 위하여 사용되며 삽입하고자 원하는 위치에 표시한다.
- 주로 숫자 기억형에 사용된다. 문자, 문숫자 기억형에는 사용할 수 없다.

  03     A   PIC     99,99,99.			** A= □□□□□□□□ 8자리
  03     B   PIC        9(6).			** B= □□□□□□  6자리
  MOVE    123456  TO A   B.			** B=  123456   A=  12,34,56

 

② . 소수점(Decimal point) Code
- 가상 소수점(V)은 기계 내에서 소수점의 위치를 지시하며 실제 출력시, 가상 소수점의 위치를 표시하기 위하여 사용되는 부호이다. 수치항목에만 사용하며 자리수에 포함된다. 편집 데이터의 맨 앞이나 중간에 한번만 기술해야 한다.  "." 기호 뒤에서는 Z기호와 9기호를 같이 사용할 수 없다.

   03     A   PIC     9999V99.
   03     B   PIC     999.99.
   MOVE    123   TO  A.			** A=  123 ( .)  00
   MOVE    A   TO   B.			** B=   123 .00
데이터 PICTURE 기억결과 비고
123.56 9999.999 0123.560  
12.35 999.9 012.3  
12.35 99.99 12.35  
-12.35 S99.99 12.35  
12.35 999.99 ERROR V기호와 사용불가
012.35 9.99.99 ERROR 2 회 사용 안됨.
12.35 ZZZ.Z9 ERROR 기호뒤에서 Z,9 같이 사용 불가

 

③ Z (ZERO 삭제기호 코드)
- 숫자 데이터의 출력시 소수점이 없으면 PICTURE 기호의 우측 끝과 숫자의 끝자리가 맞추어져서 출력된다.  이 때 데이터의 유효 숫자가 작아서 픽쳐 기호의 왼쪽과 대응되는 값이 0이면 그 자리를 빈칸으로 인쇄한다.  PCITURE 기호 9가 유효 숫자보다 많으면, 남는 PICTURE 기호 9자리에는 0이 인쇄된다. 즉 의미없는 0를 공백(Blank)로 출력한다.

   03     A   PIC     99,999.
   03     B   PIC     ZZ,ZZ9.
   MOVE    1234  TO    A  B.		** A = 01, 204     B=   □1,204
데이터 PICTURE 기억결과 비고
123 Z(4)9 □□123  
456 Z9(5) □00456  
0 Z(3) □□□  
123 9ZZZ ERROR발생 9 기호 뒤 사용불가

Z 부호로 편집된 기억 장소는 연산식에 사용될 수 없다.  단 연산 결과를 받는 기억 장소는 편집을 위한 기호를 이용하여 편집되어도 된다.

④ B (공란 삽입)
- 인쇄하고자 하는 문자나 숫자 사이에 공백을 삽입하고자 할 때 사용한다. 반드시 다른 기호와 같이 사용해야만 한다.
- 숫자 기억형과 문숫자 기억형에 사용된다.

   03  A   PIC     X(3) VALUE 'KDN'.			** A= KDN
   03  B   PIC     XBBXX.
   MOVE    A    TO  B.					** B=I  □ □ B M

 

⑤ 기호 +, -
- 출력되는 수치에 대하여 양수, 음수인가를 표시하기 위하여 사용되는 부호이다.
- 출력에 +,- 의 부호를 표시하기 위해서는 반드시 부호를 기억할 수 있는 형태로 기억되어 있어야 한다.

   03  A   PIC   S9(5). VALUE -12345.		** A=12345
   03  B   PIC   -9(5).
   MOVE    A    TO  B.					** B=  - 1 2 3 4 5

- 화폐 기호로 사용하는 기호와 같은 방법으로 표시되며 기억되어 있는 값이 양수인 경우, - 부호를 PICTURE로 사용하면 음수 부호와 관계없이 출력에 부호가 인쇄되지 않는다.

⑥  $ ,  ₩기호
- 출력되는 수치에 화폐 기호를 삽입시켜 인쇄하고자 할 때 사용한다.
- 일반적으로 숫자 기억형에 사용되며, $ 기호는 아무런 제한없이 사용할 수 있으나 ₩ 기호를 사용하려면 SPECIAL-NAMES 소절에서 "CURRENCY SIGN IS W".  라고 기술해야 한다.

       ENVIRONMENT  DIVISION.
       CONFIGURATION  SECTION.
       SPECIAL-NAMES.  CURRENCY SIGN IS  '₩'.
       ....
       DATA  DIVISION.
       ..
       WORING-STORAGE  SECTION.
       01 PR-1.
            03 P-MONEY PIC ₩₩₩,₩₩₩.
   03  A   PIC   9(5) VALUE 12345.		** A=12345
   03  B   PIC   $9(6).
   03  C   PIC   $,$$$,$$$.
   03  D  PIC    W(6).
   03  D  PIC    W(3),W(3).			** B= $ 0 1 2 3 4 5   C= □ □$ 1 2 , 3 4 5
   MOVE    A    TO  B C D E.		** D= W 1 2 3 4 5    E= W 1 2 , 3 4 5

 

 ⑦   /  기호
- / 가 위치한 곳에는 무조건 /를 나타낸다.  반드시 다른 기호와 같이 사용해야만 한다.

⑧ CR , DB 기호
- 회계 장부에서 대변(CR), 차변(DB) 을 표시하기 위한 편집기호 사용한다. 항목의 수치가 음수일 경우에만 유효숫자 맨 끝에 CR 또는 DB를 표시하고 양수이면 공백 두 개를 표시한다.
- PICTURE 정리

구분 기호 기호의 의미 기호의 형태
기억용
PICTURE
9 숫자 데이터를 기억하는 기호 03 A PIC 9(003).
A 영문자 데이터를 기억하는 기호 03 A PIC A(003).
X 영숫자 데이터를 기억하는 기호 03 A PIC X(003).
연산용
PICTURE
S 수의 부호 표시 03 A PIC S9(003).
V 소수점의 위치 기억 03 A PIC 99V99.
P 소수점의 위치가 바깥쪽일 때 03 A PIC P9(003).
편집용
PICTURE
, 숫자 사이에 자리점 삽입 03 A PIC 99,999.
. 출력데이터의 소수점 위치 지정 03 A PIC 9.99.
Z 유효 숫자 앞의 0 제거 03 A PIC ZZ,ZZ9.
B 문자 또는 숫자 사이의 공백 03 A PIC XXBX(3).
+,- 숫자 사이에 음양 기호 붙여 인쇄 03 A PIC +999.
$,₩ 화페의 종류 표시 03 A PIC $9(03).

 

 5) USAGE 구
- 기억장소에 데이터를 기억시킬 때 컴퓨터가 처리하기 용이한 형태로 기억하여 연산처리 효율을 높이기 위하여 사용한다.  즉, 정수 및 실수형 데이터 형태를 취하여 연산처리 속도를 높이고자 할 경우 USAGE구를 사용한다.
- USAGE구는 레벨넘버에 관계없이 모든 수치 데이터 항목에 사용할 수 있다.
- USAGE 구가 Group item에 사용되면 그룹내의 각 항목에 적용된다.

 ** USAGE 형식
 USAGE   IS   {  DISPLAY / COMP / BINARY / COMP-1 / COMP-2 / COMP-3 / INDEX }

 

(가)  DISPLAY
- 1 Byte 에  한 문자씩 기억되는 10진(ASCII) 형태의 데이터 항목을 정의한다. USAGE구가 생략되면 USAGE IS DISPLAY로 간주된다.
- 문자 형태로 표현된 수치 데이터는 연산처리시 연산 속도는 떨어지나 입.출력시에 문자 형태 그대로 쓸 수 있으므로 편리하다.  반면에 2진 형태로 기억된 수치 데이터는 연산 처리시에는 효율적이나 연산 처리후 출력시키고자 할 경우는 다시 10진 형태로 바꾸어야 하므로 속도를 요하는 데이터가 아니면 문자 형태로 사용하는 것이 더 효율적이다.

(나) COMPUTATIONAL 또는 COMP, INDEX
- 10 진수 정수형을 2진수(BINARY) 로 기억시키고자 할 경우 사용한다. 9,S,V,P 기호에서만 사용할 수 있다.
- COMP구는 PICTURE구에서 지정된 정수형 자리수가 1~4자리일 경우는 2 Byte, 5 ~ 9자리일 경우는 4Byte, 10 ~18 자리일 경우는 기억장치 내에서 8 byte가 확보된다.
- COMP구는 실수표현 방식과는 달리 지수부분이 존재하지 않고 정규화도 필요치 않으며 음수일 경우는 보수로 기억된다.

** COMP 예제
       **  L,M,N,O에 각각 -1000 이 기억되어 있은 경우
        01   COMP-REC.
              03     L    PIC       9(03)     COMP.
              03    M    PIC     S9(03)     COMP.
              03    N    PIC      S9(05)    COMP.
              03    O    PIC      S9(04).  
** -----------------------------------------------
                 L    00000000   01100100          <=  sign의 개념이 없으므로 양수로 기억
                 M   11111111   10011100           <= 보수로 기억됨
                 N   11111111   11111111   11111111    10011100         <=    4 byte가 확보
                 O    3       0     3       1      3        0      D       0          <=   존 형식을 취함

①  COMP-1 , COMPUTATIONAL-1
- 10 진수를 실수형태로 기억시키는데 부동 소수점을 나타낼 때 사용한다. COMP-1으로 지정시 무조건 4 Byte(Full Word) 단정도(Single precision) 부동소수점 형태를 취한다.  이 항목의 최대 범위는 -32768 ~  32767 이다.

②  COMP-2 , COMPUTATIONAL-2
- COMP-1 과 동일하며 COMP-2으로 지정시 무조건 8 Byte(Double word) 배정도(double precision) 부동 소수점 형태를 취한다.

③  COMP-3 , COMPUTATIONAL-3 (PACK Type)
- 존(Zone) 형식의 10진수를 존 부분에도 숫자를 기억하게 하는 형태이다.  즉 PACK 10진 형태의 기억을 나타낸다.
- 부호(sign)는 맨 하위(byte)의 마지막 4 bit(digit) 부분에 표시된다.  양수이면 F 또는 C로 , 음수이면 D로 표시된다.  S가 지정되지 않은 양수에는 F가 표시된다.  수치형 데이터의 기억장소를 반정도를 절약할 수 있는 장점이 있다.

④  INDEX
- 해당 데이터 항목을 배열의 첨자나 색인용으로 사용하기 위하여 지정할 경우 사용한다.

 

 

(다) SYNCHRONIZED / SYNC 구
- 기억장치내의 데이터를 기억시킬 때 문자 단위가 아닌 WORD 단위로 기억시켜 처리 효율을 높이고자 할 경우 사용한다.  그룹 항목에서는 사용할 수 없으며 생략시는 SYNC LEFT로 간주된다.  

** SYNC 형식
        {  SYNCHRONIZED / SYNC }  {  LEFT / RIGHT }
** -------------------------------------
** SYNC 예제
        01  DATA-REC.
              03  DATA1  PIC  X(07)  VALUE  "COBOL" SYNC  RIGHT.
              03  DATA2  PIC  X(07)  VALUE  "COBOL" SYNC  LEFT.
** 설명 :    DATA1 에 기억장소에  "□□COBOL" 으로 저장된다.
**           DATA2 에 기억장소에  "COBOL□□" 으로 저장된다. 2개의 WORD가 할당된다.


(라) JUSTIFIED 구
- 문자 항목에 데이터를 기억시키면 왼쪽에서 오른쪽으로 기억되고 오른쪽 남는 부분이 공백으로 되는 것이 원칙이나 JUST RIGHT구를 사용하여 반대로 숫자 같이 기억시킬 수 있다.  그러나 숫자 항목과 레벨넘버 66,88로 지정된 항목에서는 사용할 수 없다.

** JUSTIFIED 형식
          {   JUSTIFIED / JUST  }  [  RIGHT ]
** ------------------------------------
** JUSTIFIED 예제
        01  DATA-REC.
              03  D-A   PIC  X(03)    JUST.
                MOVE    'A'    TO     D-A.
   ** 설명 :  D-A 기억장소에 "□□A"  으로 저장된다.

 

(마) BALNK WHEN ZERO
- 항목의 값이 0(ZERO)이면 그 항목의 값을 공백으로 바꾸어 준다.  이 구는 숫자 항목이나 숫자 편집 항목에서만 사용할 수 있으며 숫자 항목에 이 구가 지정되면 그 항목은 숫자 편집 항목으로 간주되어 연산에 사용할 수 없다.

** BALNK WHEN ZERO 형식
        BALNK  WHEN  ZERO
** ---------------------------------------------
** BALNK WHEN ZERO  예제
         01    PR-REC.
                   03    PR-A    PIC  9(03)  BLANK WHEN ZERO .
           MOVE    0    TO    PR-A.
  ** 설명 : PR-A 기억장소에  "□□0" 으로 저장된다.

 

(바) VALUE IS 구
- 어떤 기억장소에 초기값을 부여할 때 사용하며 WORKING-STORAGE SECTION에서만 기술할 수 있다. 단 레벨넘버 88로 지정된 항목은 예외이다. VALUE구 사용시 기억장소의 성격과 리터럴의 성격은 같아야 하며 항목의 크기는 리터럴의 크기보다 크거나 같아야 하고 REDEFINES,OCCURS 명령과는 같이 사용할 수 없다. FIGURATIVE CONSTANT를 지정했을 경우는 기억장소의 크기와 동일한 값으로 간주한다.

** VALUE IS  형식
        VALUE   [  IS  ] literal
** --------------------------------------
** VALUE IS 예제
        01  IN-REC.
             03   WK-CNT    PIC   9(02)   VALUE   0.
             03   WK-TITLE PIC X(10) VALUE "*REPORT*".

 

 

(3) SCREEN SECTION
- DATA DIVISION 의 WORKING-STORAGE SECTION 다음에 기술될 수 있는 것으로서 화면을 사용한 입력,출력 형식을 지정하기 위한 SECTION 이다.

** 형식
        SCREEN            SECTION.
        level-number     screen-name
        [ BLANK SCREEN ]
        [ LINE NUMBER IS {  identifier /  [ PLUS ] integer }
        [ COLUMN NUMBER IS { identifier /  [ PLUS ] integer }
        [ { PICTURE / PIC } IS  string   {   FROM { identifer / literal }  }
                                                             / {  TO  identifier  }  /  { USING  identifier }  ]
        [ BLANK LINE ]  
        [ BLANK REMAINDER ]
        [ BELL ]
        [ BLINK ]
        [ REVERSE ]
        [ { NO } HIGHLIGHT ]
        [ UNDERLINE ]
        [ VALUE ] IS literal
        [ BLANK WHEN ZERO ]    [   { JUSTIFIED / JUST   } RIGHT ]
        [ AUTO ]
        [ SECURE ]
        [ REQUIRED ]
        [ FULL ]
** ----------------------------------------------
** 사용예
        SCREEN      SECTION.
        01 SCR-R.
             03 BLANK SCREEN.
             03 LINE   3 COL 22 VALUE "* 사원 자료 입력화면 *".
             03 LINE   8 COL 12 VALUE "1. 사번 : ".
             03 LINE 10 COL 12 VALUE "2. 이름 : ".
             03 LINE 12 COL 12 VALUE "3. 학력 : ".
             03 LINE 14 COL 12 VALUE "4. 입사일: ".
             03 LINE 16 COL 12 VALUE "5. 부서 : ".
             03 LINE 18 COL 12 VALUE "6. 직급 : ".
             03 LINE 20 COL 12 VALUE "7. 기본급: ".
             03 LINE 22 COL 12 VALUE "8. 수당 : ".
        01 AIN-REC.
             03 A-SABUN       LINE 08 COL 25     PIC 9(06)   USING I-SABUN  AUTO.
             03 A-NAME        LINE 10 COL 25     PIC X(10)   USING I-NAME  AUTO.
             03 A-EDUC        LINE 12 COL 25     PIC X(08)   USING I-EDUC   AUTO.
             03 A-INDATE      LINE 14 COL 25    PIC 9(06)   USING I-INDATE   AUTO.
             03 A-PART        LINE 16 COL 25     PIC X(20)   USING I-PART   AUTO.
             03 A-CLASS      LINE 18 COL 25     PIC X(06)   USING I-CLASS   AUTO.
             03 A-KIBONSU   LINE 20 COL 25    PIC 9(07)   USING I-KIBONSU   AUTO.
             03 A-SUDANG    LINE 22 COL 25     PIC 9(07)   USING I-SUDANG   AUTO.

- SCREEN SECTION에 기술될 수 있는 사항들은 WORING-STORAGE SECTION에서와 비슷하다.
- SCREEN SECTION에서는 배열로 지정된 항목을 사용할 수 없다. 그러나 실행 프로그램 Vision 에 따라서는 사용될 수 있다.
- SCREEN SECTION에서 사용될 수 있는 실행문은 ACCEPT 문과 DISPLAY 문이 있다.
- level-number 66,88은 사용할 수 없다.

*  ACCEPT 문에 사용될 수 있는 절 : AUTO, FULL, SECURE, REQUIRE, JUST
*  DISPLAY 문에 사용될 수 있는 절
 -  BLANK SCREEN, BLANK LINE, BLANK REMAINDER, BELL, VALUE, BLANK WHEN ZERO
*  ACCEPT 문 / DISPLAY 문에 사용될 수 있는 절
 - LINE, COLUMN, REVERSE, UNDERLINE, BLINK, HIGHLIGHT

 ⓐ BLANK SCREEN 절
   현재의 전체화면이 지워지고 커서의 위치는 변하지 않는다.

SCREEN                            SECTION.
01  SCREEN-CLEAR.
     03  BLANK                    SCREEN.
.....
PROCEDURE                   DIVISION.
START-POINT.
     DISPLAY                   SCREEN-CLEAR.

ⓑ LINE NUMBER

   화면상의 커서의 행의 위치를 정할 때 사용한다. 기술된 identifier는 DATA DIVISION;에서 정의되어야 한다. 일반적으로 사용되는 화면은 1행부터 24행이다.

SCREEN                            SECTION.
01  SCREEN-CLEAR.
     03  BLANK                    SCREEN.
     03  LINE  PLUS  2    "초기 화면".
.....
PROCEDURE                   DIVISION.
START-POINT.
     DISPLAY                   SCREEN-CLEAR.

 ⓒ COLUMN  / COL UMBER 절

   화면상의 커서의 열의 위치를 정할 때 사용한다. 기술된 identifier는 DATA DIVISION;에서 정의되어야 한다. 일반적으로 사용되는 화면은 1열부터 80열까지 이다.    NUMBER는 생략될 수 있으며 COL 만 기술해도 된다.

SCREEN                            SECTION.
01  SCREEN-CLEAR.
     03  BLANK                    SCREEN.
     03  COL  PLUS  2    "초기 화면".
.....

ⓓ PIC 절
   PICTURE 구에서 사용되는 모든 코드를 사용할 수 있으나 V코드와 P코드는 사용할 수 없다.   PICTURE 구가 지정되었을 때는 반드시 USING, FROM, TO 중의 하나가 뒤따라 온다.
- FROM 구 : 필드값을 출력하는 기능이므로 DISPLAY문에만 사용한다.
- TO 구 : 필드값을 입력받는 기능이므로 ACCEPT 문에만 사용한다.
- USING 구 : 필드값을 입.출력 모드로 지정한다.  

 

ⓔ BLANK LINE 절
    현재의 커서 위치로부터 그 줄의 끝까지 지우기 위해서 사용

SCREEN                            SECTION.
01  LINE-ERASE.
     03  LINE   30  BLANK LINE.
...
PROCEDURE                   DIVISION.
DISPLAY  LINE-ERASE.

 

ⓕ BLANK REMAINDER 절
   현재의 커서 위치로부터 화면 끝까지 지우기 위해 사용되며 커서의 위치는 변동되지 않는다.

ⓖ BELL 절
  BELL문이 수행되면 PC의 스피커로 "삐" 소리가 나온다.

SCREEN                            SECTION.
01  BELL-REC.
     03  BELL.
     03  LINE   01   COL  10  PIC  X(09)  FROM "초기 화면" BELL.
.....
PROCEDURE                    DIVISION.
     DISPLAY   BELL-REC.

 

ⓗ BLINK 절
  BLINK문이 수행되면 필드의 내용이 화면에 표시될 때 깜빡인다.

ⓘ REVERSE 절
  필드의 내용이 화면에 역상으로 나타난다.

ⓙ { NO } HIGHLIGHT 절
  HIGHLIGHT문이 수행되면 필드의 내용이 화면에 밝게 표시되며 생략하면 NO HIGHLIGHT가 지정된 것으로 어둡게 표시된다.

ⓚ UNDERLINE 절
  필드이 내용이 화면에 표시될 때 밑줄이 나타난다.

  01 OUT-SCR.
       03 BLANK SCREEN.
       03 LINE 05 COL 10 "BLINK..."  BLINK.
       03 LINE      COL 10 "REVERSE..." REVERSE.
       03 LINE      COL 10 "HIGHLIGHT..." HIGHLIGHT.
       03 LINE      COL 10 "UNDERLINE..." UNDERLINE.
       03 LINE      COL 10 "BLINK/REVERSE..." BLINK REVERSE
         ...................
   PROCEDURE DIVISION.
        ...................
        DISPLAY OUT-SCR.

ⓛ VALUE IS 절
   VALUE문은 BLANK WHEN ZERO, JUST, SECURE, AUTO, FULL, REQUIRE와 같이 기술할 수 없다.  일반적으로 생략하며 DISPLAY문에서만 사용할 수 있다.

ⓜ AUTO 절
   AUTO문은 입력필드가 사용자의 입력에 의하여 자리수가 다 채워졌을 때 ENTER키를 누르지 않아도 자동으로 다음 입력항목으로 넘어간다. AUTO문이 지정된 필드가 그룹항목이 아닐 때에는 TO / USING 문이 기술되어야 한다. AUTO문이 그룹항목에 지정되면 그룹항목 내의 모든 입력필드가 AUTO문 적용받는다.

ⓝ SECURE 절
  SECURE 문은 입력되는 데이터가 화면에 표시되지 않게 한다.  데이터가 입력될 때마다 대신 * 가 표시되므로 PASSWORD(암호) 지정시 사용된다.

ⓞ REQUIRED 절
  REQUIRE 문은 입력필드에 반드시 공백이 아닌 데이터가 입력되어야만 다음으로 이동시킨다.

** SECURE 절, REQUIRE 절 예제
05  LINE  2  COLUMN  13   PIC   X(005)   TO  PASS   SECURE   REQUIRED..

 

ⓟ FULL 절
  FULL문은 입력필드에 반드시 공백이나 어떤 문자가 지정된 자리수만큼 채워졌을 때만 다음으로 이동시킨다.  데이터가 지정된 자리수만큼 입력되지 않으면 enter 키는 취소되면 다시 입력되도록 한다.

** FULL 예제
05  LINE  2  COLUMN  13   PIC   X(005)   TO  PASS   SECURE   FULL.

 

 

(4) LINKAGE SECTION.
-  LINKAGE SECTION은 부프로그램(Sub-Program)작성할 때 부프로그램의 DATA DIVISION의 기술하며 주프로그램 (Main-Program)에서 호출된 프로그램에 매개 변수(parameter)값을 넘겨 주는데 사용한다.
-  매개변수는 주프로그램의 CALL USING 문과 부프로그램의 PROCEDURE DIVISION USING문을 사용하여 지정한다.
-  LINKAGE SECTION에서는 조건변수(레벨넘버 88)을 제외하며, VALUE구를 사용하여 초기값을 부여할 수도 없다.
-  주프로그램의 WORKING-STORAGE SECTION에서 설정된 항목과 같은 이름이 부프로그램의 LINKAGE SECTION에서 기술될 수 있다.

** LINKAGE SECTION의 사용예(부프로그램) FILE-NAME : 980825S.CBL
        IDENTIFICATION DIVISION.
        PROGRAM-ID.       980825S.
        ...
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       ...
       LINKAGE        SECTION.
         01 L-SCORE.
              03 L-JUMSU PIC 9(3) OCCURS 2.
         01 L-SCORERED REDEFINES L-SCORE.
              03 L-JUM PIC X(3) OCCURS 2.
         01 L-RESULT.
              03 L-HAKJUM PIC X(2) OCCURS 2.
              03 L-PYUNG PIC 9V99.
        PROCEDURE DIVISION
                     USING L-SCORE L-RESULT.
        SIJAK.
            ....
            EXIT PROGRAM.
TOTAL-ADD.
          IF L-JUM(K) = SPACE
              MOVE '/' TO L-HAKJUM(K)
           ELSE
              INSPECT L-JUM(K) REPLACING LEADING SPACE BY ZERO
              MOVE 0 TO T FIND
              PERFORM FIND-HAK UNTIL OK
              MOVE SJUM(T) TO L-HAKJUM(K)
               COMPUTE TOT = TOT + SHAK(T) * HJ(K)
               COMPUTE SIN = SIN + HJ(K)
           END-IF.
        FIND-HAK.
           ADD 1 TO T.
           IF L-JUM(K) > SCR(T) OR L-JUM(K) = SCR(T)
               MOVE 1 TO FIND
           ELSE
           GO TO FIND-HAK.
** -----------------------------------------------------------------------------
** LINKAGE SECTION의 사용예(주프로그램)
        WORKING-STORAGE SECTION.
         .....
        01 PARAMETERS.
             03 PARM1 PIC X(6).
             03 PARM2 PIC X(10).
        PROCEDURE DIVISION.
        SIJAK.
              OPEN INPUT S-F OUTPUT P-F.
              .....
              IF NOT EOF
                ADD 1 TO CNT
                MOVE T-SCORE(CNT) TO PARM1
                CALL '980825S' USING PARM1 PARM2
                MOVE PARM2 TO T-RESULT(CNT)
              END-IF.
              ....

 

 

 

출처 : https://m.blog.naver.com/kilokilo77/40016871304

 

 

 

 

 

 



 

'개발 > cobol' 카테고리의 다른 글

03_cobol 명령문  (0) 2021.12.15
01_cobol 기초  (0) 2021.12.15

+ Recent posts