41 KiB
COBOL言語解説書
ドキュメント情報
- タイトル: Enterprise COBOL for z/OS 6.5 Language Reference
- 出版番号: SC27-8713-04
- ページ数: 916
- 日本語訳題: COBOL言語解説書
- ベース: IBM Enterprise COBOL for z/OS V6.5 (プログラム番号 5655-EC6)
第1部: COBOL言語構造
1.1 文字セットとコードページ
基本COBOL文字セット
COBOLの基本文字セットは、ラテンアルファベットの大文字・小文字、数字、および特殊文字で構成される。
| 文字 | 意味 | 使用例 |
|---|---|---|
| スペース | 区切り文字 | 01 WS-A PIC X(10). |
+ |
算術演算子、編集文字 | COMPUTE WS-A = B + C. |
-(ハイフン) |
算術演算子、編集文字、継続文字、COBOL語要素 | COMPUTE WS-A = B - C. |
*(アスタリスク) |
算術演算子、編集文字、注釈文字 | * THIS IS COMMENT |
/(スラッシュ) |
算術演算子、編集文字、継続文字 | PIC 99/99/99. |
= |
代入文字、関係文字 | COMPUTE A = B. |
$ |
通貨記号(編集文字) | PIC $$99. |
,(カンマ) |
編集文字、区切り文字 | PIC 99,999. |
;(セミコロン) |
区切り文字 | MOVE 10 TO A; B. |
:(コロン) |
関係文字、修飾演算子 | MOVE VAR(1:10) TO V. |
.(ピリオド) |
小数点、区切り文字 | MOVE 10 TO A, B. |
"(引用符) |
英数字リテラルの区切り | VALUE "HELLO". |
'(アポストロフィ) |
英数字リテラルの区切り | VALUE 'HELLO'. |
( ) |
括弧(区切り文字) | IF (A = 10) AND (B = 5) |
> < |
関係文字 | IF A > 10 |
_(アンダースコア) |
ユーザ定義語要素 | 01 WS_VAR PIC X(10). |
A-Z / a-z |
アルファベット(英字) | |
0-9 |
数字 |
コードページ
コードページ(コード化文字セット)とは、各文字に数値位置(コードポイント)を割り当てた符号化表現のこと。IBMの各コードページはコードページ名(例:IBM-1252)とCCSID(例:1252)で識別される。
Enterprise COBOLのコードページ関連機能:
CODEPAGEコンパイラオプションで使用するコードページを指定- デフォルトのコードページは IBM-1140(CCSID 1140)
- ナショナルリテラルおよびUSAGE NATIONALのデータは UTF-16BE(CCSID 1200)で符号化
- UTF-8リテラルおよびUSAGE UTF-8のデータは UTF-8(CCSID 1208)で符号化
文字符号化単位(エンコーディングユニット):
| USAGE / カテゴリ | エンコーディング単位 |
|---|---|
| DISPLAY(英数字) | 1バイト |
| DISPLAY-1(DBCS) | 2バイト |
| NATIONAL | 2バイト |
| UTF-8 | 1バイト |
ランタイムコードページの種類:
- シングルバイトEBCDIC
- EBCDIC DBCS(Shift-Out/Shift-Inで区切られた2バイト文字)
- Unicode UTF-16
- Unicode UTF-8
1.2 文字列(COBOL語とリテラル)
文字列(character-string)とは、COBOL語、リテラル、PICTURE文字列、または注釈項目を形成する連続した文字のこと。文字列は区切り文字(separator)によって区切られる。
COBOL予約語
予約語はCOBOLソースユニット内で事前定義された意味を持つ文字列。6つのタイプがある:
- キーワード — 特定の句、項目、文で必須の語
- オプション語 — 可読性向上のための省略可能な語
- FIGURATIVE CONSTANT( figurative constants) — ZERO, SPACE等
- 特殊文字語 — 算術演算子(+ - / * **)、関係演算子(< > = <= >=)、浮動注釈指示子(*>)、疑似テキスト区切り(==)、コンパイラ指示子指示記号(>>)
- 特殊オブジェクト識別子 — SELF, SUPER
- 特殊レジスタ — ADDRESS OF, RETURN-CODE等
ユーザ定義語
ユーザが指定するCOBOL語。最大30バイト。以下の文字を使用可能:
- ラテン大文字 A~Z
- ラテン小文字 a~z
- 数字 0~9
- ハイフン(-):先頭・末尾不可
- アンダースコア(_):先頭不可
ユーザ定義語の種類とDBCS許容:
| 種類 | DBCS許容 |
|---|---|
| Alphabet-name(アルファベット名) | 可 |
| Class-name(クラス名) | 可 |
| Condition-name(条件名) | 可 |
| Data-name(データ名) | 可 |
| File-name(ファイル名) | 可 |
| Function-name(関数名) | 不可 |
| Index-name(インデックス名) | 可 |
| Level-number(レベル番号01-49, 66, 77, 88) | 不可 |
| Library-name(ライブラリ名) | 不可 |
| Mnemonic-name(ニモニック名) | 可 |
| Paragraph-name(段落名) | 可 |
| Program-name(プログラム名) | 不可 |
| Record-name(レコード名) | 可 |
| Section-name(節名) | 可 |
| Symbolic-character(記号文字) | 可 |
| Text-name(テキスト名) | 不可 |
| Type-name(型名) | 可 |
| XML-schema-name(XMLスキーマ名) | 可 |
システム名
システムに対して特定の意味を持つ文字列。3タイプ:
- Computer-name(計算機名)
- Language-name(言語名)
- Implementor-name(実装者名):Environment-name, External-class-name, External-fileid, Assignment-name
FIGURATIVE CONSTANTS( figurative定数)
| 定数 | 意味 |
|---|---|
| ZERO, ZEROS, ZEROES | 数値0、または文字'0'の1回以上の出現 |
| SPACE, SPACES | 1つ以上のブランク(空白) |
| HIGH-VALUE, HIGH-VALUES | 使用中の照合順序で最上位の文字 |
| LOW-VALUE, LOW-VALUES | 使用中の照合順序で最下位の文字 |
| QUOTE, QUOTES | 引用符文字またはアポストロフィ文字 |
| ALL literal | リテラルの文字列を1回以上繰り返したもの |
| NULL, NULLS | POINTER/PROCEDURE-POINTER等の無効アドレスを示す値 |
| symbolic-character | SYMBOLIC CHARACTERS句で定義された文字 |
特殊レジスタ一覧
特殊レジスタは、コンパイラが生成するストレージ領域を名前で参照するための予約語。
| 特殊レジスタ | 暗黙定義 | 用途 |
|---|---|---|
| ADDRESS OF | USAGE POINTER | LINKAGE/LOCAL/WORKING-STORAGE項目のアドレス参照 |
| DEBUG-ITEM | 01グループ(6サブフィールド) | デバッグ宣言手続きへの情報提供 |
| IGY-JAVAIOP-CALL-EXCEPTION | PIC 9(9)/9(18) COMP-5 | Java静的メソッド呼出時の例外オブジェクト参照 |
| JNIENVPTR | USAGE POINTER | JNI環境ポインタ参照 |
| JSON-CODE | PIC S9(9) BINARY | JSON GENERATE/PARSEの成功/例外コード |
| JSON-STATUS | PIC S9(9) BINARY | JSON PARSEの非例外状態コード |
| LENGTH OF | PIC 9(9)/9(18) BINARY | データ項目の現在バイト長 |
| LINAGE-COUNTER | 可変(LINAGE句依存) | 現在ページ内の行番号 |
| RETURN-CODE | PIC S9(4) BINARY GLOBAL | 呼出元へのリターンコード |
| SHIFT-OUT / SHIFT-IN | PIC X(1) DISPLAY | EBCDICシフトアウト/シフトイン制御文字 |
| SORT-CONTROL | PIC X(8) DISPLAY | ソート制御文のDD名 |
| SORT-CORE-SIZE | PIC S9(8) BINARY | ソートユーティリティが使用可能なストレージ量 |
| SORT-FILE-SIZE | PIC S9(8) BINARY | ソート入力ファイルの推定レコード数 |
| SORT-MESSAGE | PIC X(8) DISPLAY | ソートメッセージ出力先DD名 |
| SORT-MODE-SIZE | PIC S9(5) BINARY | 可変長レコードの最頻長 |
| SORT-RETURN | PIC S9(4) BINARY | ソート/マージ完了コード(0=成功, 16=失敗) |
| TALLY | PIC 9(5) BINARY GLOBAL | 計数用(参照・変更可能) |
| WHEN-COMPILED | PIC X(16) DISPLAY | コンパイル開始日時(MM/DD/YYhh.mm.ss) |
| XML-CODE | PIC S9(9) BINARY | XML GENERATE/PARSEのステータスコード |
| XML-EVENT | PIC X(30) DISPLAY | XMLパースイベント名 |
| XML-INFORMATION | PIC S9(9) BINARY | XMLイベントの追加情報 |
| XML-NAMESPACE / XML-NNAMESPACE | 英数字/ナショナル | XML名前空間識別子 |
| XML-NAMESPACE-PREFIX / XML-NNAMESPACE-PREFIX | 英数字/ナショナル | XML名前空間プレフィックス |
| XML-NTEXT | ナショナル | XML文書断片(NATIONAL) |
| XML-TEXT | 英数字(可変長) | XML文書断片(DISPLAY) |
リテラル
リテラルは、その構成文字またはFIGURATIVE CONSTANTの使用によって値が指定される文字列。
英数字リテラル(Alphanumeric Literals):
- 基本形式:
"文字列"または'文字列' - 最大長: 160バイト、最小長: 1バイト
- 16進表記:
X"hex"またはX'hex' - NULL終端:
Z"文字列"またはZ'文字列' - DBCS文字を含む英数字リテラルは継続不可
DBCSリテラル:
- 形式:
G"<DBCS文字>"またはG'<DBCS文字>' - 最大長: 28文字
- 継続不可
UTF-8リテラル:
- 基本形式:
U"文字データ"またはU'文字データ' - Unicodeエスケープシーケンス対応:
\uhhhh(BMP),\U00hhhhh(追加面) - 16進表記:
UX"hex"またはUX'hex'
数値リテラル:
- 数字0-9、符号(+/-)、小数点で構成
- 整数: 1~18桁(ARITH(COMPAT)時)または1~31桁(ARITH(EXTEND)時)
- 浮動小数点: 仮数部に小数点必須、指数部はE+/-nn
ナショナルリテラル:
- NSYMBOL(NATIONAL)時:
N"文字データ"またはN'文字データ' - 最大長: 80文字位置
- 16進表記:
NX"hex"またはNX'hex' - UTF-16(ビッグエンディアン)に自動変換
1.3 区切り文字(Separators)
| 区切り文字 | 意味 |
|---|---|
| スペース(b) | 語の区切り |
,b(カンマ+スペース) |
区切りカンマ |
.b(ピリオド+スペース) |
区切りピリオド(文の終端) |
;b(セミコロン+スペース) |
区切りセミコロン |
: |
コロン |
:: |
修飾演算子 |
( ) |
括弧 |
"..." |
引用符(英数字リテラル区切り) |
'...' |
アポストロフィ(英数字リテラル区切り) |
==...== |
疑似テキスト区切り |
U" / U' |
UTF-8リテラル開始区切り |
UX" / UX' |
UTF-8 16進リテラル開始区切り |
X" / X' |
英数字16進リテラル開始区切り |
Z" / Z' |
NULL終端英数字リテラル開始区切り |
N" / N' |
ナショナル/DBCSリテラル開始区切り |
NX" / NX' |
ナショナル16進リテラル開始区切り |
G" / G' |
DBCSリテラル開始区切り |
1.4 参照形式(Reference Format)
COBOLソーステキストは72桁の行内で以下の領域に分けられる:
| 領域 | 桁 | 内容 |
|---|---|---|
| Sequence number area | 1~6 | 行番号(任意) |
| Indicator area | 7 | 指示子 |
| Area A | 8~11 | 特定の要素の開始位置 |
| Area B | 12~72 | エントリ、文、句など |
Area Aに記述するもの:
- 区分ヘッダ(IDENTIFICATION/ENVIRONMENT/DATA/PROCEDURE DIVISION.)
- 節ヘッダ
- 段落ヘッダ、段落名
- レベル指示子(FD, SD)、レベル番号01、77
- DECLARATIVES / END DECLARATIVES
- プログラム/クラス/メソッド終了マーカ
Area Bに記述するもの:
- エントリ、文、句
- 継続行
指示子領域(Column 7)の用途:
-(ハイフン): 継続行*(アスタリスク): 注釈行/(スラッシュ): 改ページ+注釈行D/d: デバッグ行
第2部: COBOLプログラム構造
2.1 4つのDIVISION
COBOLソースプログラムは以下の4つの区分(division)から構成される:
IDENTIFICATION DIVISION(識別区分)
プログラムの識別情報を定義する必須区分。
主要な段落:
PROGRAM-ID. program-name.— プログラム名(必須)CLASS-ID. class-name INHERITS class-name.— クラス定義FUNCTION-ID. function-name.— ユーザ定義関数METHOD-ID. "method-name".— メソッド定義
ENVIRONMENT DIVISION(環境区分)
プログラムの実行環境に依存する側面を記述する。
CONFIGURATION SECTION:
- SOURCE-COMPUTET. source-computer-name
- OBJECT-COMPUTER. object-computer-name
- SPECIAL-NAMES.(特殊名)
- REPOSITORY.(リポジトリ)
INPUT-OUTPUT SECTION:
- FILE-CONTROL.(ファイル制御)
- I-O-CONTROL.(入出力制御)
DATA DIVISION(データ区分)
プログラムで処理されるすべてのデータを構造化して記述する。
FILE SECTION(ファイル節) — データファイルの構造を定義 WORKING-STORAGE SECTION(作業格納節) — 内部データ LOCAL-STORAGE SECTION(局所格納節) — 呼出毎に再割当てされるデータ LINKAGE SECTION(連絡節) — 他プログラムから受け渡されるデータ
PROCEDURE DIVISION(手続き区分)
実行可能な処理を記述する。
2.2 ネストプログラム
COBOLプログラムは他のCOBOLプログラムを内部に含むことができる。これらを含まれるプログラムをネストプログラムと呼ぶ。
- 直接含まれる(directly contained): プログラムBがプログラムA内に直接ある場合
- 間接的に含まれる(indirectly contained): プログラムBがプログラムA内の別のプログラムCに含まれる場合
- 兄弟プログラム(sibling): 同じプログラムに直接含まれるプログラム同士
- COMMON属性: ネストプログラムで指定でき、それを含むプログラムとその兄弟から参照可能
2.3 クラス定義/メソッド定義/ユーザ定義関数
クラス定義
オブジェクト指向COBOLのための構造。Javaとの相互運用を目的とする。
IDENTIFICATION DIVISION.
CLASS-ID. class-name INHERITS superclass.
ENVIRONMENT DIVISION.
...(CONFIGURATION SECTIONのみ)
FACTORY.(ファクトリ定義:静的メソッド+静的データ)
OBJECT.(オブジェクト定義:インスタンスメソッド+インスタンスデータ)
END CLASS class-name.
メソッド定義
クラス内のメソッドは独立したMETHOD-IDで識別される。GOBACKで終了。
ユーザ定義関数
FUNCTION-IDで定義。RETURNING句で戻り値を指定。
第3部: ENVIRONMENT DIVISION詳細
3.1 CONFIGURATION SECTION(構成節)
SOURCE-COMPUTER段落
SOURCE-COMPUTER. computer-name WITH DEBUGGING MODE.
OBJECT-COMPUTER段落
OBJECT-COMPUTER. computer-name
MEMORY SIZE integer WORDS/CHARACTERS/MODULES
PROGRAM COLLATING SEQUENCE IS alphabet-name
SEGMENT-LIMIT IS priority-number.
SPECIAL-NAMES段落
SPECIAL-NAMES.
implementor-name IS mnemonic-name
alphabet-name IS ...
CLASS class-name IS ...
CURRENCY SIGN IS literal
DECIMAL-POINT IS COMMA
SYMBOLIC CHARACTERS ...
XML-SCHEMA ...
主な句:
| 句 | 機能 |
|---|---|
| ALPHABET句 | 文字セット/照合順序の定義(EBCDIC, ASCII, STANDARD-1/2, ユーザ定義) |
| CLASS句 | 文字の分類定義(例:CLASS VALID-CHAR IS 'A' THRU 'Z') |
| CURRENCY SIGN句 | 通貨記号の変更 |
| DECIMAL-POINT IS COMMA | ピリオドとカンマの機能交換 |
| SYMBOLIC CHARACTERS句 | ユーザ定義FIGURATIVE CONSTANTの作成 |
| XML-SCHEMA句 | XMLスキーマファイルの指定 |
REPOSITORY段落
クラス名とその外部クラス名の対応付け、ユーザ定義関数のプロトタイプ参照を行う。
REPOSITORY.
CLASS class-name IS external-class-name
FUNCTION function-name
FUNCTION ALL INTRINSIC.
3.2 INPUT-OUTPUT SECTION(入出力節)
FILE-CONTROL段落
FILE-CONTROL.
SELECT file-name ASSIGN TO assignment-name
ORGANIZATION IS SEQUENTIAL/INDEXED/RELATIVE
ACCESS MODE IS SEQUENTIAL/RANDOM/DYNAMIC
RECORD KEY IS data-name
ALTERNATE RECORD KEY IS data-name
RELATIVE KEY IS data-name
FILE STATUS IS data-name
RESERVE integer AREAS
PADDING CHARACTER IS data-name
RECORD DELIMITER IS STANDARD-1.
| 句 | 機能 |
|---|---|
| SELECT / ASSIGN | ファイルと外部名の関連付け |
| ORGANIZATION | ファイル編成(SEQUENTIAL/INDEXED/RELATIVE) |
| ACCESS MODE | アクセスモード(SEQUENTIAL/RANDOM/DYNAMIC) |
| RECORD KEY | 索引ファイルの主レコードキー |
| ALTERNATE RECORD KEY | 代替レコードキー |
| RELATIVE KEY | 相対ファイルのキー |
| FILE STATUS | ファイルステータスを受け取るデータ項目 |
| RESERVE | バッファ領域数 |
I-O-CONTROL段落
I-O-CONTROL.
RERUN ON assignment-name EVERY integer RECORDS
SAME AREA FOR file-name
SAME RECORD AREA FOR file-name
SAME SORT AREA FOR file-name
MULTIPLE FILE TAPE CONTAINS file-name
APPLY WRITE-ONLY ON file-name.
第4部: DATA DIVISION詳細
4.1 ファイル記述(FD)
FD file-name
BLOCK CONTAINS integer-1 TO integer-2 RECORDS/CHARACTERS
RECORD CONTAINS integer-1 TO integer-2 CHARACTERS
LABEL RECORDS ARE STANDARD/OMITTED
VALUE OF data-name IS literal
DATA RECORDS ARE record-name
LINAGE IS data-name/integer LINES
WITH FOOTING AT data-name/integer
LINES AT TOP data-name/integer
LINES AT BOTTOM data-name/integer
RECORDING MODE IS F/V/U/S
CODE-SET IS alphabet-name
EXTERNAL / GLOBAL.
| 句 | 機能 |
|---|---|
| BLOCK CONTAINS | 物理ブロックサイズ |
| RECORD CONTAINS | 論理レコードサイズ |
| LABEL RECORDS | ラベル処理(STANDARD/OMITTED) |
| VALUE OF | ラベル内の識別情報 |
| LINAGE | ページ行数制御(帳票出力用) |
| CODE-SET | コードページ変換の指定 |
LINAGE句:
- LINAGE-COUNTER特殊レジスタが自動生成される
WRITE文実行時に自動更新- 初期値は1
4.2 データ記述項目
レベルの概念
| レベル番号 | 用途 |
|---|---|
| 01 | レコード自体(Area Aに記述) |
| 02~49 | グループ項目、基本項目 |
| 66 | RENAMES句用 |
| 77 | 独立項目(WORKING-STORAGE等、Area Aに記述) |
| 88 | 条件名(VALUE句と共に使用) |
PICTURE句
PICTURE文字列でデータ項目の特性と編集要件を指定する。
PICTURE記号一覧:
| 記号 | 意味 | サイズ算定 |
|---|---|---|
| A | 英字またはスペースのみ | 1文字位置 |
| B | スペース挿入 | 1文字位置 |
| E | 外部浮動小数点の指数開始 | 1文字位置 |
| G | DBCS文字位置 | 1文字位置 |
| N | DBCS/ナショナル文字位置 | 1文字位置 |
| P | 仮定小数点スケーリング位置 | カウントされない |
| S | 符号の存在 | カウントされない(SEPARATE時は1) |
| U | UTF-8文字位置 | 1文字位置 |
| V | 仮定小数点の位置 | カウントされない |
| X | 任意の英数字文字 | 1文字位置 |
| Z | 先頭ゼロ置換(スペース) | 1文字位置 |
| 9 | 数字 | 1桁 |
| 0 | ゼロ挿入 | 1文字位置 |
| / | スラッシュ挿入 | 1文字位置 |
| , | カンマ挿入 | 1文字位置 |
| . | 実小数点(編集) | 1文字位置 |
| + / - | 編集符号制御 | 1文字位置 |
| CR / DB | 編集符号制御 | 2文字位置 |
| * | チェックプロテクト | 1文字位置 |
| cs | 通貨記号 | 1+文字位置 |
データカテゴリ:
| カテゴリ | PICTURE記号 |
|---|---|
| Alphabetic | Aのみ |
| Alphanumeric | X、またはA/X/9の組合せ |
| Alphanumeric-edited | A X 9 B 0 /(少なくとも1つのA/Xと1つのB/0//) |
| DBCS | G、G B、N(NSYMBOL(DBCS)時) |
| External floating-point | +9.9E+99形式 |
| National | N(NSYMBOL(NATIONAL)時) |
| National-edited | N B 0 / |
| Numeric | 9 S V P |
| Numeric-edited | 数値編集記号 |
| UTF-8 | U |
編集の種類:
- 単純挿入編集: B, 0, /
- 特殊挿入編集: .(実小数点)
- 固定挿入編集: +, -, CR, DB, cs(通貨記号)
- 浮動挿入編集: +, -, cs(複数回指定)
- ゼロ抑制/置換編集: Z, *
OCCURS句(表定義)
固定長表:
05 item OCCURS integer TIMES
ASCENDING/DESCENDING KEY IS data-name
INDEXED BY index-name
PIC X(10).
可変長表(ODO: OCCURS DEPENDING ON):
05 item OCCURS integer-1 TO integer-2 TIMES
DEPENDING ON data-name
PIC X(10).
無制限表(UNBOUNDED):
05 item OCCURS 1 TO UNBOUNDED TIMES
DEPENDING ON data-name
PIC X(10).
REDEFINES句
同一ストレージ領域の再定義。レベル番号が同じでなければならない。
01 WS-EMPLOYEE.
05 WS-EMP-NAME PIC X(30).
05 WS-EMP-SALARY PIC 9(5)V99.
01 WS-EMP-ALT REDEFINES WS-EMPLOYEE.
05 WS-EMP-CODE PIC X(10).
05 WS-EMP-DEPT PIC X(25).
RENAMES句(レベル66)
既存データ項目の再グループ化。レベル66で指定。
66 WS-RENAME-EMP RENAMES WS-FIRST-NAME THRU WS-LAST-NAME.
USAGE句
データ項目の内部表現を指定。
| USAEGE句 | 説明 |
|---|---|
| DISPLAY | ディスプレイ形式(標準) |
| DISPLAY-1 | DBCSデータ |
| COMP / COMP-4 / BINARY | 2進形式 |
| COMP-1 | 内部浮動小数点(短精度) |
| COMP-2 | 内部浮動小数点(長精度) |
| COMP-3 | 内部10進形式(パック10進) |
| INDEX | インデックスデータ項目 |
| POINTER | アドレスポインタ |
| POINTER-32 | 32ビットアドレスポインタ |
| PROCEDURE-POINTER | 手続きポインタ |
| FUNCTION-POINTER | 関数ポインタ |
| OBJECT REFERENCE | オブジェクト参照 |
| NATIONAL | ナショナル文字(UTF-16) |
| UTF-8 | UTF-8文字 |
| NATIVE | ネイティブ2進表現 |
VALUE句
データ項目の初期値を指定。
01 WS-COUNT PIC 9(4) VALUE 0.
88 WS-ZERO VALUE 0.
88 WS-POSITIVE VALUE 1 THRU 9999.
その他の句
| 句 | 機能 |
|---|---|
| BLANK WHEN ZERO | 値がゼロのとき項目を空白にする |
| JUSTIFIED RIGHT | 右詰め指定 |
| SYNCHRONIZED | 自然境界への位置合わせ(SYNC) |
| EXTERNAL | 実行単位全体で共有される外部データ |
| GLOBAL | ネストプログラムから参照可能な大域データ |
| SIGN IS LEADING/TRALLING SEPARATE | 符号の表現方法 |
| GROUP-USAGE NATIONAL/UTF-8 | グループ全体の使用法 |
| TYPEDEF / TYPE | ユーザ定義型 |
| DYNAMIC LENGTH | 動的長さ基本項目 |
| VOLATILE | 揮発性データの指定 |
第5部: PROCEDURE DIVISION詳細
5.1 手続き部構造
PROCEDURE DIVISIONヘッダ
PROCEDURE DIVISION USING data-name-1 ...
RETURNING data-name.
- USING句: LINKAGE SECTIONの項目を引数として受け取る
- RETURNING句: 戻り値を指定
宣言部(DECLARATIVES)
例外処理やデバッグ処理を記述する特殊な手続き領域。
DECLARATIVES.
section-name SECTION. USE AFTER EXCEPTION/ERROR ON file-name.
...
END DECLARATIVES.
算術式
算術演算子: +(加算), -(減算), *(乗算), /(除算), **(べき乗)
演算優先順位: ** → * / / → + / -
条件式
関係条件:
operand-1 IS [NOT] GREATER THAN / LESS THAN / EQUAL TO operand-2
operand-1 > / < / = / >= / <= operand-2
クラス条件:
identifier IS [NOT] NUMERIC / ALPHABETIC / ALPHABETIC-LOWER /
ALPHABETIC-UPPER / DBCS / KANJI / class-name
条件名条件:
condition-name (88レベルで定義された条件名)
符号条件:
operand IS [NOT] POSITIVE / NEGATIVE / ZERO
スイッチ状態条件:
condition-name (SPECIAL-NAMESで定義されたUPSIスイッチ)
省略引数条件:
data-name IS [NOT] OMITTED
複合条件:
condition-1 AND/OR condition-2
NOT condition
5.2 手続き文一覧
ACCEPT文
システム日付・時刻・ユーザ入力の受取り。
ACCEPT identifier FROM DATE/DAY/TIME/DAY-OF-WEEK/
DATE YYYYMMDD/DAY YYYYDDD
ACCEPT identifier (SYSINからの入力)
- DATE: PIC 9(6) — YYMMDD
- DATE YYYYMMDD: PIC 9(8) — YYYYMMDD
- DAY: PIC 9(5) — YYDDD
- DAY YYYYDDD: PIC 9(7) — YYYYDDD
- DAY-OF-WEEK: PIC 9(1) — 1=月曜~7=日曜
- TIME: PIC 9(8) — HHMMSShh(時分秒ミリ秒)
ADD文
加算。ROUNDED、SIZE ERROR、CORRESPONDING句をサポート。
ADD identifier/literal TO identifier [ROUNDED]
[ON SIZE ERROR imperative] [NOT ON SIZE ERROR imperative]
ADD identifier/literal GIVING identifier [ROUNDED]
ADD CORRESPONDING identifier-1 TO identifier-2
CALL文
サブプログラム呼出。
CALL literal/identifier USING [BY REFERENCE/CONTENT/VALUE] data-name
RETURNING identifier
ON EXCEPTION imperative
NOT ON EXCEPTION imperative
- BY REFERENCE: アドレス渡し(デフォルト)
- BY CONTENT: 内容のコピーを渡す
- BY VALUE: 値を渡す
CANCEL文
プログラムの解放。次回CALL時に初期状態で再ロードされる。
CANCEL program-name
CLOSE文
ファイルのクローズ。
CLOSE file-name [WITH LOCK/NO REWIND/REEL/FOR REMOVAL]
COMPUTE文
計算代入。複数の算術演算を組合せ可能。
COMPUTE identifier [ROUNDED] = arithmetic-expression
[ON SIZE ERROR imperative] [NOT ON SIZE ERROR imperative]
CONTINUE文
無操作(no operation)文。
CONTINUE
DELETE文
索引ファイルまたは相対ファイルからのレコード削除。
DELETE file-name RECORD
[INVALID KEY imperative] [NOT INVALID KEY imperative]
DISPLAY文
オペランドの内容を出力装置へ転送。
DISPLAY identifier/literal
UPON mnemonic-name/environment-name
WITH NO ADVANCING
DIVIDE文
除算。商と余りを計算。
DIVIDE identifier INTO identifier [ROUNDED]
[REMAINDER identifier]
DIVIDE identifier BY identifier GIVING identifier [ROUNDED]
[REMAINDER identifier]
EVALUATE文
多分岐。COBOLのswitch/case相当。
EVALUATE subject ALSO subject
WHEN object ALSO object imperative
WHEN OTHER imperative
END-EVALUATE
EXIT文
手続きの共通終了点。プログラム/メソッド/PARAGRAPH/SECTIONの終了。
EXIT PROGRAM (呼出元に復帰)
EXIT METHOD (メソッド終了)
EXIT PARAGRAPH (段落終了)
EXIT SECTION (節終了)
EXIT PERFORM [CYCLE] (インラインPERFORMからの脱出)
GOBACK文
プログラム/メソッドの論理的終了。呼出元に復帰。
GOBACK
GO TO文
制御の移動。
GO TO procedure-name (無条件)
GO TO procedure-name DEPENDING ON identifier (条件付)
IF文
条件分岐。
IF condition THEN statement-1 ELSE statement-2 END-IF
INITIALIZE文
データ項目のカテゴリ別初期化。
INITIALIZE identifier [WITH FILLER] [ALL]
[REPLACING category BY identifier/literal]
[THEN TO DEFAULT]
カテゴリ: ALPHABETIC, ALPHANUMERIC, NUMERIC, ALPHANUMERIC-EDITED, NUMERIC-EDITED, DBCS, NATIONAL, NATIONAL-EDITED, UTF-8等
INSPECT文
文字列の検査/置換/変換。
INSPECT identifier TALLYING count FOR CHARACTERS/ALL/LEADING/FIRST
identifier/literal [BEFORE/AFTER identifier/literal]
INSPECT identifier REPLACING CHARACTERS/ALL/LEADING/FIRST
identifier/literal BY identifier/literal
INSPECT identifier CONVERTING identifier TO identifier
MERGE文
2つ以上のファイルのマージ。
MERGE file-name ON ASCENDING/DESCENDING KEY data-name
USING file-name-1 file-name-2
GIVING file-name-3
MOVE文
代入。基本項目移動、グループ移動、編集をサポート。
MOVE identifier/literal TO identifier
MOVE CORRESPONDING identifier-1 TO identifier-2
MULTIPLY文
乗算。
MULTIPLY identifier BY identifier [ROUNDED]
MULTIPLY identifier BY identifier GIVING identifier [ROUNDED]
OPEN文
ファイルのオープン。
OPEN INPUT/OUTPUT/I-O/EXTEND file-name
PERFORM文
繰り返し処理。
PERFORM procedure [THRU procedure] (基本)
PERFORM procedure integer TIMES (回数指定)
PERFORM procedure UNTIL condition (条件指定)
PERFORM procedure VARYING identifier FROM ... BY ... UNTIL ...
PERFORM inline-statement END-PERFORM (インライン)
READ文
ファイルからの読込。
READ file-name [INTO identifier] [KEY IS data-name]
[AT END imperative] [INVALID KEY imperative]
[NOT AT END/INVALID KEY imperative]
RELEASE文
SORT文へのレコード引き渡し。
RELEASE record-name FROM identifier
RETURN文
SORT文からのレコード受取。
RETURN file-name INTO identifier
AT END imperative [NOT AT END imperative]
REWRITE文
レコードの書換え。
REWRITE record-name [FROM identifier]
[INVALID KEY imperative] [NOT INVALID KEY imperative]
SEARCH文
内部表の探索。
- シリアルサーチ(SEARCH): 逐次探索。INDEXED BY必須。
- バイナリサーチ(SEARCH ALL): 二分探索。ASCENDING/DESCENDING KEY必須。
SEARCH table-name [VARYING index-name]
AT END imperative
WHEN condition imperative
SEARCH ALL table-name
AT END imperative
WHEN KEY condition imperative
SET文
インデックス、アドレス、条件名、ポインタの設定。
SET index-name UP BY/DOWN BY integer (索引値の増減)
SET index-name TO integer (索引値設定)
SET condition-name TO TRUE (条件名真設定)
SET address TO pointer (アドレス設定)
SET procedure-pointer TO entry (手続きポインタ設定)
SET object-reference TO object (オブジェクト参照設定)
SORT文
ファイルの整列。
SORT file-name ON ASCENDING/DESCENDING KEY data-name
[WITH DUPLICATES IN ORDER]
INPUT PROCEDURE section [THRU section]
USING file-name
OUTPUT PROCEDURE section [THRU section]
GIVING file-name
START文
VSAMファイルの開始位置指定。
START file-name KEY IS GREATER THAN/EQUAL TO/LESS THAN data-name
[INVALID KEY imperative] [NOT INVALID KEY imperative]
STOP文
実行停止。
STOP RUN (プログラム終了、制御をOSに戻す)
STOP literal (一時停止、オペレータ介入待ち)
STRING文
文字列の連結。
STRING identifier/literal DELIMITED BY identifier/literal/SIZE
INTO identifier
[WITH POINTER identifier]
[ON OVERFLOW imperative]
END-STRING
SUBTRACT文
減算。
SUBTRACT identifier/literal FROM identifier [ROUNDED]
SUBTRACT identifier/literal FROM identifier GIVING identifier
SUBTRACT CORRESPONDING identifier-1 FROM identifier-2
UNSTRING文
文字列の分解。
UNSTRING identifier
DELIMITED BY [ALL] identifier/literal [OR ...]
INTO identifier [DELIMITER IN identifier] [COUNT IN identifier]
[WITH POINTER identifier]
[TALLYING IN identifier]
[ON OVERFLOW imperative] [NOT ON OVERFLOW imperative]
END-UNSTRING
WRITE文
ファイルへの書出し。
WRITE record-name [FROM identifier]
[AFTER/BEFORE ADVANCING PAGE/LINE identifier/literal]
[END-OF-PAGE imperative]
[INVALID KEY imperative] [NOT INVALID KEY imperative]
第6部: 組み込み関数
関数の呼出し形式
FUNCTION function-name ( argument ... )
関数一覧
| 関数名 | 型 | 説明 |
|---|---|---|
| ABS | 数値 | 絶対値 |
| ACOS | 数値 | 逆余弦(アークコサイン) |
| ANNUITY | 数値 | 年金係数 |
| ASIN | 数値 | 逆正弦(アークサイン) |
| ATAN | 数値 | 逆正接(アークタンジェント) |
| BIT-OF | 整数 | 2進数文字列表現 |
| BIT-TO-CHAR | 英数字 | 2進文字列を文字に変換 |
| BYTE-LENGTH | 整数 | バイト長 |
| CHAR | 英数字 | コードポイントから文字 |
| COMBINED-DATETIME | 整数 | 日時を結合した整数値 |
| CONTENT-OF | 英数字/ナショナル | ファイル内容の読取り |
| COS | 数値 | 余弦(コサイン) |
| CURRENT-DATE | 英数字 | 現在日時(YYYYMMDDhhmmssss+hhmm) |
| DATE-OF-INTEGER | 整数 | 整数日付→YYYYMMDD変換 |
| DATE-TO-YYYYMMDD | 整数 | 2桁年→4桁年変換 |
| DAY-OF-INTEGER | 整数 | 整数日付→YYYYDDD変換 |
| DAY-TO-YYYYDDD | 整数 | 2桁年→4桁年(ユリウス日)変換 |
| DISPLAY-OF | 英数字 | ナショナル/UTF-8→指定コードページ変換 |
| E | 数値 | 自然対数の底(約2.71828) |
| EXP | 数値 | eのべき乗 |
| EXP10 | 数値 | 10のべき乗 |
| FACTORIAL | 整数 | 階乗 |
| FORMATTED-CURRENT-DATE | 英数字/ナショナル/UTF-8 | 書式指定現在日時 |
| FORMATTED-DATE | 英数字/ナショナル/UTF-8 | 書式指定日付変換 |
| FORMATTED-DATETIME | 英数字/ナショナル/UTF-8 | 書式指定日時変換 |
| FORMATTED-TIME | 英数字/ナショナル/UTF-8 | 書式指定時刻変換 |
| HEX-OF | 英数字 | 16進文字列表現 |
| HEX-TO-CHAR | 英数字 | 16進文字列→バイト変換 |
| INTEGER | 整数 | 切捨て整数化 |
| INTEGER-OF-DATE | 整数 | YYYYMMDD→整数日付変換 |
| INTEGER-OF-DAY | 整数 | YYYYDDD→整数日付変換 |
| INTEGER-OF-FORMATTED-DATE | 整数 | 書式指定日付→整数日付変換 |
| INTEGER-PART | 整数 | 整数部 |
| LENGTH | 整数 | 文字位置長(キャラクタ長) |
| LOG | 数値 | 自然対数 |
| LOG10 | 数値 | 常用対数 |
| LOWER-CASE | 英数字 | 英字小文字変換 |
| MAX | 可変 | 最大値 |
| MEAN | 数値 | 平均値 |
| MEDIAN | 数値 | 中央値 |
| MIDRANGE | 数値 | ミッドレンジ |
| MIN | 可変 | 最小値 |
| MOD | 整数 | 剰余(モジュロ) |
| NATIONAL-OF | ナショナル | 英数字→ナショナル変換 |
| NUMVAL | 数値 | 英数字→数値変換 |
| NUMVAL-C | 数値 | 通貨記号付き文字列→数値変換 |
| NUMVAL-F | 数値 | 浮動小数点文字列→数値変換 |
| ORD | 整数 | 文字の序数位置 |
| ORD-MAX | 整数 | 最大値の引数の序数 |
| ORD-MIN | 整数 | 最小値の引数の序数 |
| PI | 数値 | 円周率(約3.14159) |
| PRESENT-VALUE | 数値 | 現在価値 |
| RANDOM | 数値 | 乱数 |
| RANGE | 数値 | 範囲(最大値-最小値) |
| REM | 数値 | 剰余(REM = 被除数 - 除数 * 商) |
| REVERSE | 英数字/ナショナル | 文字列反転 |
| SECONDS-FROM-FORMATTED-TIME | 数値 | 書式指定時刻→秒数 |
| SECONDS-PAST-MIDNIGHT | 数値 | 現在時刻の正午からの経過秒数 |
| SIGN | 整数 | 符号(-1, 0, 1) |
| SIN | 数値 | 正弦(サイン) |
| SQRT | 数値 | 平方根 |
| STANDARD-DEVIATION | 数値 | 標準偏差 |
| SUM | 数値 | 合計 |
| TAN | 数値 | 正接(タンジェント) |
| TEST-DATE-YYYYMMDD | 整数 | YYYYMMDD日付の妥当性検証 |
| TEST-DAY-YYYYDDD | 整数 | YYYYDDD日付の妥当性検証 |
| TEST-FORMATTED-DATETIME | 整数 | 書式指定日時の妥当性検証 |
| TEST-NUMVAL | 整数 | 数値変換可能性の検証 |
| TEST-NUMVAL-C | 整数 | 通貨数値変換可能性の検証 |
| TEST-NUMVAL-F | 整数 | 浮動小数点変換可能性の検証 |
| TRIM | 英数字/ナショナル | 先頭/末尾スペース除去 |
| ULENGTH | 整数 | ナショナル文字の長さ(コードポイント単位) |
| UPOS | 整数 | ナショナル文字列内の部分文字位置 |
| UPPER-CASE | 英数字/ナショナル | 英字大文字変換 |
| USUBSTR | ナショナル | ナショナル部分文字列 |
| USUPPLEMENTARY | 整数 | 補助文字サロゲート有無判定 |
| UUID4 | 英数字 | UUID v4生成 |
| UVALID | 整数 | UTF-16文字列の妥当性検証 |
| UWIDTH | 整数 | UTF-16符号化単位数 |
| VARIANCE | 数値 | 分散 |
| WHEN-COMPILED | 英数字 | コンパイル日時(YYYYMMDDhhmmsshh+00) |
| YEAR-TO-YYYY | 整数 | 2桁年→4桁年変換 |
第7部: コンパイラ指示文とコンパイラ指令
コンパイラ指示文(Compiler-Directing Statements)
BASIS文
別のソーステキストを現在のソースユニットに組み込む。
BASIS "basis-name"
CBL(PROCESS)文
コンパイラオプションをソース内で指定。
CBL option-name
PROCESS option-name
*CBL(*CONTROL)文
ソースコード一覧の制御。
*CBL SOURCE/NOSOURCE MAP/NOMAP LIST/NOLIST
COPY文
COPYライブラリからソーステキストを組み込む。テキスト操作(置換)可能。
COPY text-name [IN library-name]
[REPLACING ==pseudo-text== BY ==pseudo-text== ...]
- 疑似テキストによる置換機能
- ライブラリ検索順序: 指定ライブラリ → SYSLIB
DELETE文
ソース一覧からの行削除指示(コーディングシート用)。
DELETE line-number
EJECT文
ソース一覧の改ページ。
EJECT
ENTER文
他言語(COBOL以外)のプログラムの呼出し(非推奨)。
ENTER language-name routine-name
INSERT文
ソース一覧への行挿入。
INSERT line-number
READY/RESET TRACE文
トレースの開始・停止。
READY TRACE
RESET TRACE
REPLACE文
ソーステキストの置換を指定。
REPLACE ==pseudo-text== BY ==pseudo-text== ...
REPLACE OFF
SERVICE LABEL文
サービストレースのラベル設定。
SERVICE LABEL label-name
SERVICE RELOAD文
サービスの再ロード。
SERVICE RELOAD
SKIP文
ソース一覧での行送り。
SKIP1 / SKIP2 / SKIP3
TITLE文
ソース一覧のタイトル指定。
TITLE "title-text"
USE文
例外処理・デバッグ宣言。
USE AFTER EXCEPTION/ERROR ON file-name/INPUT/OUTPUT/I-O/EXTEND
USE FOR DEBUGGING ON procedure-name
コンパイラ指令(Compiler Directives)
コンパイラ指令は >> で始まり、Area Bに記述する。
CALLINTERFACE
Javaとの相互運用のための呼出しインターフェース指定。
>>CALLINTERFACE DLL
DATA
WORKING-STORAGEの割当て場所指定。
>>DATA 24 / 31
条件付きコンパイル(Conditional Compilation)
>>DEFINE, >>EVALUATE, >>IF 等で条件付きコンパイルを実現。
>>DEFINE variable = value
>>IF condition
...source text...
>>ELSE
...source text...
>>END-IF
事前定義コンパイル変数:
- COBOL, COBOL2002, ENTERPRISE_COBOL, IBM_ARCHITECTURE, OS_FLAVOR, LOCALE, LANGUAGE 等
JAVA-CALLABLE
Javaから呼出し可能なCOBOLプログラムの指定。
>>JAVA-CALLABLE program-name
JAVA-SHAREABLE
COBOLプログラムがJavaと共有可能なデータを持つことを指定。
>>JAVA-SHAREABLE
IBM拡張機能(主要なもの)
Enterprise COBOL for z/OS V6.5は多くのIBM拡張機能を提供する:
- 特殊レジスタ: ADDRESS OF, LENGTH OF, RETURN-CODE, JSON-CODE, XML-CODE等
- 16進リテラル表記: X"...", NX"...", UX"..."
- NULL終端リテラル: Z"..."
- 日本語処理のためのDBCSサポート: Gリテラル、USAGE DISPLAY-1、PICTURE G/N
- 条件付きコンパイル: >>DEFINE, >>IF, >>EVALUATE
- CALL文のJava静的メソッド呼出し
- JSON GENERATE/PARSE文
- XML GENERATE/PARSE文
- ALLOCATE/FREE文による動的記憶管理
- 動的長さ基本項目(DYNAMIC LENGTH)
- 無制限表(OCCURS UNBOUNDED)
- 全関数のALL下标指定
- 64ビットアドレッシング(LP(64))
ファイルステータスキー値
| コード | 意味 |
|---|---|
| 00 | 正常終了 |
| 02 | 正常終了(重複レコード) |
| 04 | 正常終了(レコード長不整合) |
| 05 | 正常終了(参照オプショナルファイル未存在) |
| 10 | ファイル終了 |
| 14 | 相対ファイルの範囲外レコード |
| 21 | シーケンスエラー |
| 22 | 重複キー |
| 23 | レコード未存在 |
| 24 | バッファ不足 |
| 30 | 恒久的エラー |
| 34 | ファイル編成の境界違反 |
| 35 | ファイル未存在(OPEN) |
| 37 | アクセスモード違反 |
| 38 | クローズ前のOPEN |
| 39 | 属性矛盾 |
| 41 | OPEN時のファイル未存在 |
| 42 | クローズ済ファイルのOPEN |
| 43 | 書込み禁止ファイルの書込み |
| 44 | 読込み専用ファイルの書換え/削除 |
| 46 | 読込み専用(順次) |
| 47 | OPEN時のファイル読込み不可 |
| 48 | ファイル編成とアクセスモード矛盾 |
| 49 | OPEN時のファイル属性不整合 |
| 90 | 論理エラー該当せず |
| 91 | ファイル機構のアベンド |
| 92 | ストレージ不足 |
| 93 | リソースアクセス不可 |
| 94 | ファイルの位置指定不整合 |
| 95 | ファイル宣言の不整合 |
| 96 | 入出力制御の矛盾 |
| 97 | ファイルの編成/モード矛盾 |
| 98 | ボリューム処理エラー |
| 99 | レコードロック競合 |
本ドキュメントは IBM Enterprise COBOL for z/OS V6.5 Language Reference (SC27-8713-04) の内容に基づいて作成されました。