Files
cobol-tna-system/品質管理/COBOL言語解説書_IBM_zOS_V65.md

41 KiB
Raw Permalink Blame History

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-1140CCSID 1140
  • ナショナルリテラルおよびUSAGE NATIONALのデータは UTF-16BECCSID 1200)で符号化
  • UTF-8リテラルおよびUSAGE UTF-8のデータは UTF-8CCSID 1208)で符号化

文字符号化単位(エンコーディングユニット):

USAGE / カテゴリ エンコーディング単位
DISPLAY(英数字) 1バイト
DISPLAY-1DBCS 2バイト
NATIONAL 2バイト
UTF-8 1バイト

ランタイムコードページの種類:

  • シングルバイトEBCDIC
  • EBCDIC DBCSShift-Out/Shift-Inで区切られた2バイト文字)
  • Unicode UTF-16
  • Unicode UTF-8

1.2 文字列(COBOL語とリテラル)

文字列(character-string)とは、COBOL語、リテラル、PICTURE文字列、または注釈項目を形成する連続した文字のこと。文字列は区切り文字(separator)によって区切られる。

COBOL予約語

予約語はCOBOLソースユニット内で事前定義された意味を持つ文字列。6つのタイプがある:

  1. キーワード — 特定の句、項目、文で必須の語
  2. オプション語 — 可読性向上のための省略可能な語
  3. FIGURATIVE CONSTANT figurative constants — ZERO, SPACE等
  4. 特殊文字語 — 算術演算子(+ - / * **)、関係演算子(< > = <= >=)、浮動注釈指示子(*>)、疑似テキスト区切り(==)、コンパイラ指示子指示記号(>>)
  5. 特殊オブジェクト識別子 — SELF, SUPER
  6. 特殊レジスタ — ADDRESS OF, RETURN-CODE等

ユーザ定義語

ユーザが指定するCOBOL語。最大30バイト。以下の文字を使用可能:

  • ラテン大文字 AZ
  • ラテン小文字 az
  • 数字 09
  • ハイフン(-):先頭・末尾不可
  • アンダースコア(_):先頭不可

ユーザ定義語の種類と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-nameXMLスキーマ名)

システム名

システムに対して特定の意味を持つ文字列。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、符号(+/-)、小数点で構成
  • 整数: 118桁(ARITH(COMPAT)時)または131桁(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 16 行番号(任意)
Indicator area 7 指示子
Area A 811 特定の要素の開始位置
Area B 1272 エントリ、文、句など

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に記述)
0249 グループ項目、基本項目
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、NNSYMBOL(DBCS)時)
External floating-point +9.9E+99形式
National NNSYMBOL(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"

CBLPROCESS)文

コンパイラオプションをソース内で指定。

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) の内容に基づいて作成されました。