Contents

も く じStep 01 COBOLとは ……………………………………………………6
1.1
1.2
1.3
1.4
1.5

COBOLの特徴................................................................................6
COBOLプログラムとCOBOLコンパイラ ..................................6
言語の構造.......................................................................................7
プログラミングの手順 ...................................................................8
正書法 ..............................................................................................9

Step 07 印刷プログラム――仕様書と領域図 ………………………34
7.1 例題1-1：印刷プログラム .........................................................34
7.2 コーディング................................................................................35

Step 08 印刷プログラム――フローチャートとコーディングI ……39
8.1 コーディング................................................................................39

Step 02 COBOLプログラムの構造 …………………………………102.1
2.22.3
2.4

プログラムの構造 ........................................................................10データ部の構造 ............................................................................11
手続き部........................................................................................12
本書で使用するファイルの種類 .................................................12

Step 03 命令語1（OPEN・CLOSE・READ・WRITE）………14
3.1
3.2
3.3
3.4
3.5
3.6

OPEN命令 ...................................................................................14
CLOSE命令 .................................................................................14
READ命令....................................................................................15
WRITE命令 ..................................................................................16
出力帳票の標準形式 ....................................................................17
日本語データの扱い ....................................................................18

Step 04 命令語2（INITIALIZE・PERFORM・MOVE）………20
4.1 INITIALIZE（初期化）命令 .......................................................20
4.2 PERFORM命令...........................................................................21
4.3 MOVE（転送）命令 ...................................................................22

Step 09 印刷プログラム――フローチャートとコーディングII ……43
9.1 コーディング................................................................................439.2 ソースプログラムと環境ファイル .............................................45

Step 10 改頁処理と合計処理 …………………………………………49
10.1 例題1-2：処理の追加 ..............................................................49
10.2 コーディング .............................................................................50

Step 11 グループトータル――仕様書と領域図 ……………………56
11.1 例題2：グループトータル.......................................................56

Step 12 グループトータル――フローとコーディングI ……………60
12.1 コーディング .............................................................................60

Step 13 グループトータル――フローとコーディングII ……………63
13.1 コーディング .............................................................................63Step 05 命令語3（COMPUTE・ADD・SUBTRACT・MULTIPLY・DIVIDE・IF）………………………………25

5.1
5.2
5.3
5.4
5.5
5.6

COMPUTE命令 ..........................................................................25
ADD命令（加算命令）.................................................................25
SUBTRACT命令（減算命令）...................................................26
MULTIPLY命令（乗算命令）.....................................................26
DIVIDE命令（除算命令）............................................................26
IF（条件分岐）命令.....................................................................27

Step 06 命令語4（IF・EVALUATE）………………………………29
6.1 複雑なIF（条件分岐）命令 .........................................................29
6.2 EVALUATE（多岐分岐）命令..................................................31

2

Step 14 命令語5（DISPLAY・ACCEPT・OCCURS）………66
14.1
14.2
14.3
14.4

DISPLAY（表示）命令...........................................................66
ACCEPT（小入力）命令 ........................................................66
OCCURS句（反復）.................................................................68
SET（設定）命令.....................................................................69

Step 15 命令語6（SEARCH・SEARCH ALL・REDEFINES）…72
15.1 SEARCH（表引き）命令........................................................72
15.2 SEARCH ALL命令..................................................................73
15.3 REDEFINES（再定義）命令..................................................75

Contents

3Contents

Step 16 データチェックI ………………………………………………77

Step 25 索引順編成ファイル（順呼び出し）I ……………………116

16.1 例題3：データチェック...........................................................77
16.2 コーディング .............................................................................80

Step 17 データチェックII ………………………………………………81

25.1 例題6：索引順編成ファイルの作成 ....................................116
25.2 コーディング ..........................................................................118

Step 26 索引順編成ファイル（順呼び出し）II ……………………122

17.1 コーディング .............................................................................81

Step 18 データチェックIII ……………………………………………86

26.1 コーディング ..........................................................................122

Step 27 索引順編成ファイル（順呼び出し）III……………………12518.1 コーディング .............................................................................86

Step 19 マッチングI ……………………………………………………90

27.1 コーディング ..........................................................................125

Step 28 索引順編成ファイル（乱呼び出し）I ……………………129

19.1 マッチング.................................................................................90
19.2 プルーフリスト .........................................................................91
19.3 例題4：マッチング ..................................................................92

Step 20 マッチングII ……………………………………………………94

28.1 例題7：索引順編成ファイルの追加・変更.........................129
28.2 コーディング ..........................................................................132

Step 29 索引順編成ファイル（乱呼び出し）II ……………………135
29.1 コーディング ..........................................................................135

20.1 コーディング .............................................................................94

Step 21 マッチングIII …………………………………………………98

Step 30 索引順編成ファイル(乱呼び出し)III ………………………138
30.1 コーディング ..........................................................................138

21.1 コーディング .............................................................................98

Step 22 テーブル作成とサーチ（表引き）I ………………………102
22.1 例題5：テーブル作成とサーチ（表引き）...........................10222.2 コーディング ..........................................................................104

Step 23 テーブル作成とサーチ（表引き）II ………………………107
23.1 コーディング ..........................................................................107

Step 24 テーブル作成とサーチ（表引き）III………………………110
24.1
24.2
24.3
24.4

ファイルを読み込まない方法 ...............................................110
例題5-1：SEARCH命令を使った場合 ..............................111
例題5-2：SEARCH ALL命令を使った場合 .....................112
SORT命令..............................................................................112

謝 辞
COBOL言語仕様は，CODASYL（the COnference on DAta SYstems Languages：データシステムズ言語協議会，コダシル）によって開発されました。CODASYLの要求にしたがって，「CODASYL COBOL JOURNAL OF DEVELOPMENT 1984」の謝辞の一部を以下に掲げます。
COBOLは産業界の言語であり，特定の団体や組織の所有物ではない。CODASYLCOBOL委員会又は仕様変更の提案者は，このプログラミングシステムと言語の正確性や機能について，いかなる保証も与えない。さらに，それに関する責任も負わない。
次に示す著作権表示付き資料の著作者及び著作権者は，これら全体又は一部分をCOBOLの原仕様書中に利用することを許可した。この許可は，COBOL原仕様書をプログラミングマニュアルや類似の刊行物に複製したり，利用したりする場合にまで拡張される。
FLOW-MATIC(Sperry Rand Corporationの商標),Programming for the Univac(R)Ⅰ and Ⅱ,Data Automation Systems，Sperry Rand Corporation著作権表示
1958年,1959年
IBM Commercial Translator Form No.F 28-8013,IBM著作権表示1959年
FACT,DSI 27A5260-2760,Minneapolis-Honeywell 著作権表示1960年

4

Contents5

Step01

COBOLとは● 1.3 言語の構造
文字列

COBOLは、現在でも事務処理用の言語として広く使われています。

プログラムの中で、つなっがている文字の列をいいます。文字列には、以下の種類があります。

アメリカ国防省において事務データ処理のための共通言語を作成することが必要であるか、また必要とした場合にそれを実現することが可能であるかどうかを検討するため、企業および政府のユーザ、電子計算機メーカ、その他これに関心をもつ団体などのそれぞれの代表者によって
CODASYL（COnference on Data System Languages）が組織さ

COBOLの語

A、B、C、……、Z、0、1、2、……、9、-の30文字以下の組み合わせの文字列です。最初の一文字目はA、B、C、……、Zで、必ず一意（UNIQUE）でなければいけません。
以下のいずれかに分類されます。

れ、この組織で研究開発されたものがCOBOLです。この会議でこのような言語を開発することが必要であり、また実現可能であることが確認され、その実際の開発に当たるものとして、短期作業委員会、中期作業委

・利用者語

プログラマが作るデータ名や手続き名など。30文字以下の文字列で、1文字以上の英字が文字列の中になければいけません。

員会、長期作業委員会を設立しました。

・システム名

短期作業委員会は1959年に大網をまとめ、CODASYLはこれを・予約語

COBOLと命名しました（グレース・M・ホッパー女史が開発した事務計
算用コンパイラFLOW-MATICで、自然言語（英語）の一部を原始コードとして採用していて、これが後にCOBOLの原型となりました）。

計算機名、作成者名、言語名のいずれか。

特に注意するべきもので、あらかじめ意味が定義されていて、定められた書き方でしか使ってはいけない語のこと。例えば、COBOL、DATA、DATEなど。
・定数

以下のものがあります。

文字定数

コンピュータで使用できる文字集合から任意に作る文字列で、両端を引用符（"）

でくくったもの。その値は、両端の引用符をはずした文字列。1文字以上160文字以下でなければいけません。"EIGO"、"SUGAKU"、"KOKUGO"など。
数字定数● 1.1 COBOLの特徴

数値そのものを表すデータ。符号（ないときは正）、小数点（ないときは整数）、1つ以上の数字の組み合わせで作られています。1桁以上18桁以下の数字でなければいけません。123、-25.0、7、.5（＝0.5のこと）など。

COBOLはたいへんわかりやすく、コンピュータを知らない人でも短期間の勉強ですぐにプログラムが書けるようになります。
COBOLは、プログラムの文書化ということに注意をはらって開発された最初の言語で、人間

表意定数

特別の数値または文字列を表す予約語。ZERO（数字ゼロまたは何桁かの文字ゼ、QUOTE、HIGH-VALUE、LOW-VALUE、ALL。
ロ）、SPACE（何桁かの空白）
・PICTURE句

項目名の形式を決める句で、基本項目にだけ書きます。

の言葉にもっとも近くわかりやすくできています。すなわち、プログラムをそのままの形で文書として保存できるのです。
COBOL自身が、単純な英語に似た構文をもっているので、読むだけで内容を理解でき、メンテナンスも楽です。

分離符（区切り文字）
COBOL語では、COBOLの文字列ごとに間隔を置いて、語と語をはっきり区切って書きます。
この間隔を分離符といいます。また、文字列の終わりを識別し、後続の文字列と分離するための文字または連続する文字の並びです。区切り文字自身は、文字列に属しません。空白は分離符。
分離符はいくつ書いても1つと同じとみなされます。

● 1.2 COBOLプログラムとCOBOLコンパイラ

COBOL語の世界では、「空白」と「間隔」は同じです。

普通、COBOLとは、COBOL言語とCOBOLコンパイラのことを指します。
プログラマは、COBOL言語を使ってプログラム（COBOLプログラム）を書きます。
コンピュータは、機械語しか理解できないので、COBOLプログラムを、コンピュータが直接理解できる機械語に翻訳編集するプログラムが必要となります。これが、COBOLコンパイラです。
以下の順番でCOBOLは動きます。
qソース（原始）プログラム、つまりコンパイラにかける前のプログラムを書く。
wコンパイラにかけ機械語に変換する（コンパイルするといいます）。
eプログラムを動かすのに必要なファイルなどの環境をつなげる（リンクする）。
rプログラムを動かす（実行する）。

6

Step 01 COBOLとは

7

● 1.4 プログラミングの手順● 1.5 正書法
フローチャート（流れ図）に従って、プログラムを書くことをコーディングといいます。
はじめ

最近は、コーディングせずに、直接プログラムを入力する人も多いですが、論理的にまとめるためにも、エラーをなくすためにも、きちんとコーディングすることをお薦めします。特に、勉仕様書の解析強している過程では必ずコーディングをしてください。

出力形式の作成ます。

コーディングの書き方（もちろん、入力も含みます）には、守るべきいくつかの約束があり記述用紙は、コーディングシートといいます。

大きい
領域図の作成小さい

結果が大きく異なる。

コーディングシート

流れ図の作成A
文法エラー
修正

コーディング

6 7 8

B11 1272

80

環境の設定

修正

論理エラー
修正

カラム
1

一連番号ＹＮ

コンパイル

A領域

B領域

標識領域

入力ミス？
あり

Ｙエラー？
Ｎエラー
メッセージ

・一連番号：1〜6カラム目
プログラムの先頭から6桁の数字で行単位に割り振られる番号です。利用者が特定の順序を任意に付けることができます。

なし

リンク・標識領域：7カラム目

実行・A領域：8〜11カラム目"*"で、その行が、注釈行であることを示します。
部、節の見出し部、段落名、レベル番号01または77、見出し部・環境部の内容、データ部
Ｙ
エラー？
Ｎ

プログラムの完成

おわりの一部をA領域より書き始めます。
・B領域：12〜72カラム目
特に指定のない記述は、B領域から書きます。
※パソコンCOBOLでは、何カラムまで書いてもエラーになることはありませんが、メインフレームでは、エラーになります。どちらで動かしても正しく実行することができるように、73カラム目以降は何も書かないでください。
昔は、今のようにキーボードから直接パソコンに入力するのではなく、カードパンチャーからカードに、プログラムやデータを打ち込み、カードリーダーでコンピュータに読み込んでいました。このカードが、1枚80桁の形式でできていたので、コーディングシートがこの形式でできています。同様に入力データも80バイト（桁）の大きさで作成されることが多いです。

8

Step 01 COBOLとは

9

Step02

COBOLプログラムの構造● 2.2 データ部の構造
DATA DIVISION.

ここでは、COBOLプログラムを構成する最も基本的な要素を説明します。

（ファイル節）FILE SECTION.
領域図(ファイル領域)に書いた、入力領域と出力領域を指定します。
ファイル記述項〔レコード記述項〕 ・・・

FD01● 2.1 プログラムの構造
COBOLプログラムは以下のDIVISIONで構成されます。
IDENTIFICATION DIVISION.

ファイル名.
ファイルレコード名.

05
05（見出し部）

X(05).
9(02).

プログラム名.
WORKING-STORAGE SECTION.

プログラムに名前を付けます。

AUTHOR.

ファイル項目名2

PIC
PIC

・・

プログラム全体の見出しで、プログラム名などを書きます。

PROGRAM-ID.

ファイル項目名1

作成者名.

（作業場所節）領域図（作業領域）に書いた、作業領域を指定します。

プログラム作成者の名前を書きます（自分の書いたプログラムに責任をもつためにも、書きま〔レコード記述項〕 ・・・しょう）。

01
ENVIRONMENT DIVISION.

（環境部）

使用するコンピュータの機器構成や、特別の技法など機械に関することを書きます。プログラ

作業レコード名.

05
05

作業データ名2PIC
PICX(03)9(06)

VALUE 定数1.
VALUE 定数2.

・・ムが、どのような環境で実行されるかを指定します。

CONFIGURATION SECTION.
SOURCE-COMPUTER.
翻訳用計算機名.

作業データ名1（構成節）

ソース（原始）プログラムをコンパイルする計算機名を書きます。

VALUE句は、その領域に初期値を入れる場所。
【例1】
データ項目が英数字項目の場合は、定数を文字定数か表意定数で指定します（ここでのOBJECT-COMPUTER.

SPACEは文字として扱われる表意定数）。

実行用計算機名.

実行用プログラムを実行する計算機名を書きます。

INPUT-OUTPUT SECTION.

01 FLG PIC X(01) VALUE SPACE.
（入出力節）

FILE-CONTROL.
（ファイル管理段落）
SELECT ファイル名1 ASSIGN TO 装置名1(アクセス名1).
SELECT ファイル名2 ASSIGN TO 装置名2(アクセス名2).
SELECT ファイル名3 ASSIGN TO PRINTER.
入出力ファイルを選択（SELECT）し、装置名を割り当てます（ASSIGN）。
DATA DIVISION.

（データ部）

英数字1桁の項目名FLGが確保され、初期値に空白が入ります。
【例2】
データ項目が数字項目の場合は、定数を数字か表意定数で指定します（ここでのZEROは数字として扱われる表意定数）。

01 P-CNT PIC 9(02) VALUE ZERO.
数字2桁の項目名P-CNTが確保され、初期値に0が入ります。

入力領域と出力領域をどのように用意するかを指定します。また、作業領域や中間領域を指定します。

PROCEDURE DIVISION.

（手続き部）

仕事をどのような手順で行うか指定します。

10

Step 02 COBOLプログラムの構造11【例3】・行順編成ファイルの例

VALUE句を書かないと、その領域には最初何が入っているかわかりません。
01 GOKEI

空白を打つ

PIC 9(05).

改行コード01075100088

数字5桁の項目名GOKEIだけが確保されます。初期値は不定です。

02080050065

PICは、PICTURE句の省略形です。

03055075070〜※必要のないSECTIONは、省略できます。
10100100100● 2.3 手続き部
・順編成ファイルの例
PROCEDURE DIVISION.
フローチャートの部分をコーディングします。
フローチャートには、いくつかの基本パターンがあります。例えば、改頁処理・グループトー

01075

10008802080

050065

データが連続して入っています。

タル処理・（内部）ソート処理・マッチング処理などです。
これらのフローチャートはとても合理的で、わかりやすいものです。基本パターンを覚えて、10100100100

有効に使いましょう。
索引順編成ファイル（固定長）

主要な用語

辞書のように、索引が付いているファイルと考えてください。指定したキーが、（物理的また・ファイル同じ種類のデータが集まったもので、ある目的のために集められたレコードの集まりです。

は、論理的に）昇順に並んでいます。

・レコード
関連のある情報をもった項目の集まりで、1つの処理単位となるものです。

※固定長とは、全てのレコードが一定の長さ（固定されている）からなるファイルです。

・項目
データが情報として意味をもつ最小の単位です。
基本項目

それ以上細分化されない項目

集団項目

基本項目の集まり

独立項目

その項目だけで独立していて、階層構造にならない項目

では、以下のStepから、命令語を勉強しながら、例題プログラムを作成していきましょう（プログラムは、富士通株式会社のPowerCOBOL97を使って作成しています）。

※最近は、ファイル名やデータ名などの利用者語を日本語で書くことができますが、世界中どこの機械でも動くプログラムを作成するためには、日本語の利用者語は使用しないほうがよいでしょう。

● 2.4 本書で使用するファイルの種類
行順編成ファイル（固定長）
1レコードごとに、改行コードが入っています。一般的には、レコードが連続して入っている順編成ファイルを使いますが、行順編成ファイルは、1レコードごとに、改行コードが入っているテキストファイルです。メモ帳で作成したり、データの変更や確認も簡単にできます。

12

Step 02 COBOLプログラムの構造13