1427 lines
41 KiB
Markdown
1427 lines
41 KiB
Markdown
# 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つのタイプがある:
|
||
|
||
1. **キーワード** — 特定の句、項目、文で必須の語
|
||
2. **オプション語** — 可読性向上のための省略可能な語
|
||
3. **FIGURATIVE CONSTANT( figurative constants)** — ZERO, SPACE等
|
||
4. **特殊文字語** — 算術演算子(+ - / * **)、関係演算子(< > = <= >=)、浮動注釈指示子(\*>)、疑似テキスト区切り(==)、コンパイラ指示子指示記号(>>)
|
||
5. **特殊オブジェクト識別子** — SELF, SUPER
|
||
6. **特殊レジスタ** — 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) の内容に基づいて作成されました。*
|