1. File Description entry
Enviroment division의 SELECT clause에서 정의한 파일들에 대한 설명의 시작을 나타내며, FileDescription(FD) 혹은 SortFileDescription(SD) 다음에는 파일 이름을 기술해야 한다.
-
Format 1
File description entry Format 1
File description entry Format 1 : clause1
File description entry Format 1 : clause2 -
Format 2
File description entry Format 2
File description entry Format 2 : cluase -
Format 3
File description entry Format 3
File description entry Format 3 : clause -
Format 4
File description entry Format 4
File description entry Format 4 : clause1
File description entry Format 4 : clause2
1.1. File section
File section은 각 input output file의 level-indicator(FD, SD) 포함한다.
| 항목 | 설명 |
|---|---|
file-name |
반드시 level-indicator(FD, SD) 다음에 기술해야 하고, 연관된 SELECT clause에 기술되어 있어야 한다. file-name은 프로그램 내에서 유일해야 한다. |
FD(format 1,2,3) |
FD entry의 마지막 clause 뒤에 반드시 점(.)이 와야 한다. sort/merge 파일을 제외한 모든 파일에 대해서 File section은 반드시 FD entry를 포함해야 한다. |
SD(format4) |
sort/merge 파일에 대해서 File section은 반드시 SD entry를 포함해야 한다. SD entry의 마지막 clause 뒤에 반드시 점(.)이 와야 한다. |
|
File section의 레코드는 반드시 alphanumeric 그룹 항목 또는 alphabetic, alphanumeric, DBCS, numeric의 elementary 데이터 항목이어야 한다. |
1.1.1. EXTERNAL clause
EXTERNAL clause은 COBOL program 실행 unit 내 (run unit)에서 서로 다른 프로그램이 파일을 공유하기 위해 지정한다.
1.1.3. BLOCK CONTAINS clause
BLOCK CONTAINS clause는 레코드의 물리적 길이를 정의한다. 이 구문은 Syntax는 확인하지만, 실제 실행에는 영향을 주지 않는다.
1.1.4. RECORD clause
RECORD clause가 사용될 때 레코드의 길이는 레코드 내에 기술된 데이터 항목의 USAGE와 상관없이 레코드를 저장할 때 필요한 bytes 수로 기술되어야 한다. 예를 들어 10자의 DBCS 문자로 이루어진 레코드가 있다면, RECORD clause는 RECORD CONTAINS 20 CHARACTERS로 기술해야 한다. RECORD clause가 생략되면, 컴파일러는 record description으로 레코드 길이를 결정한다.
Format 1
Format 1은 고정길이 레코드의 길이를 기술한다.
| 항목 | 설명 |
|---|---|
integer-3 |
레코드의 길이를 양의 정수로 기술해야 한다. |
Format 2
Format 2은 고정길이 또는 가변길이 레코드의 길이를 기술한다.
| 항목 | 설명 |
|---|---|
integer-4 |
레코드의 길이의 최솟값을 양의 정수로 기술한다. |
integer-5 |
레코드의 길이의 최댓값을 양의 정수로 기술한다. |
|
integer-4와 integer-5가 같으면 고정길이 레코드가 된다. |
Format 3
Format 3은 가변길이 레코드의 길이를 기술한다.
| 항목 | 설명 |
|---|---|
integer-6 |
레코드의 길이의 최솟값을 양의 정수로 기술한다. |
integer-7 |
레코드의 길이의 최댓값을 양의 정수로 기술한다. |
data-name-1 |
unsigned integer 타입의 elementary 데이터 항목이어야 한다. RELEASE, REWRITE 또는 WRITE statement가 실행되기 전에 data-name-1에 레코드 길이를 넣어야 한다. DELETE, RELEASE, REWRITE, START, WRITE statement의 실행이나 실패한 READ 또는 RETURN statement의 실행에 대해서 data-name-1의 값은 변하지 않는다. 성공적인 READ 또는 RETURN statement의 실행이 이루어지면 data-name-1의 값은 방금 가져온 레코드의 길이로 바뀐다. |
1.1.5. LABEL RECORDS clause
LABEL RECORDS clause는 라벨의 존재 유무를 정의한다. 이 구문은 Syntax는 확인하지만, 실제 실행에는 영향을 주지 않는다.
1.1.6. VALUE OF clause
VALUE OF clause는 파일과 관련된 라벨레코드를 정의한다. 이 구문은 Syntax는 확인하지만, 실제 실행에는 영향을 주지 않는다.
1.1.7. DATA RECORDS clause
DATA RECORDS clause는 파일과 연관된 데이터 이름을 정의한다. 이 구문은 Syntax는 확인하지만, 실제 실행에는 영향을 주지 않는다.
1.1.8. LINAGE clause
LINAGE clause는 논리적 페이지의 크기를 라인 수로 기술한다. 선택적으로 논리적 페이지의 footing area 시작 위치, top and bottom margins을 기술해줄 수 있다.
LINAGE clause는 OUTPUT 또는 EXTEND로 open된 sequential 파일에 유효하다.
| 항목 | 설명 |
|---|---|
data-name-5, integer8 |
논리적 페이지의 라인 수를 지정한다. 해당 라인수로 지정되는 페이지의 영역은 page body라고 한다. 값은 0보다 커야 한다. |
WITH FOOTING AT |
integer-9 또는 data-name-6의 값은 page body안 footing area의 시작 위치를 라인 수로 지정한다. 값은 0보다 커야 하고 page body의 마지막 라인보다 크면 안된다. |
LINES AT TOP |
integer-10 또는 data-name-7의 값은 논리적 페이지의 top margin을 지정한다. 값은 0 이상 이어야 한다. |
LINES AT BOTTOM |
integer-11 또는 data-name-8의 값은 논리적 페이지의 bottom margin을 지정한다. 값은 0 이상이어야 한다. |
다음 그림은 LINAGE clause의 각 부분에 대한 설명이다.
-
LINES AT TOP phrase, LINES AT BOTTOM phrase가 기술되지 않으면 해당 값은 0을 가정한다.
-
FOOTING phrase가 생략되면 page body의 값과 같다. (integer-8 or data-name-5)
-
OPEN OUTPUT statement가 실행되는 시점에 integer-8, integer-9, integer-10, integer-11의 값이 기술되어 있으면, 해당 값은 프로그램이 실행되는 동안 논리적 페이지를 구성하는 값으로 사용된다.
-
OPEN OUTPUT statement가 실행되는 시점에 data-name-5, data-name-6, data-name-7, data-name-8의 값이 있으면, 해당 값은 첫 번째 페이지의 논리적인 페이지를 구성한다. 이후 WRITE statement가 실행되어 페이지를 넘어가는 시점에 data-name-5, data-name-6, data-name-7, data-name-8의 값이 다시 새로운 논리적 페이지를 구성한다.
-
SD에 기술된 LINEAGE clause는 문법 체크만 이루어지고, 실행에는 영향을 미치지 않는다.
-
파일마다 LINAGE-COUNTER special register가 존재한다.