KIN03EXP: SELECT INTO → CURSOR(DECLARE/OPEN/FETCH/CLOSE) pattern; SUB01DAT: COPY ZANDATAC; 基本設計書A: KIN08DBU/KIN09CSV specs updated; 品質管理: coverage stats, keyword docs, test criteria
This commit is contained in:
@@ -0,0 +1,1426 @@
|
||||
# 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) の内容に基づいて作成されました。*
|
||||
Reference in New Issue
Block a user