インターネット&PC120%活用:PC活用編

cobol入門
プログラムの記述様式


cobolには堅苦しいプログラムの記述様式がありますので、
まずは、cobolプログラムの第一歩として、プログラムの記述様式から。



1 記述様式
cobolはFortranと同じく、プログラムの記述様式がかなり厳密に定められており、いわゆる古く正しい
Cobolの記述様式(正書法というらしい)は、結構堅苦しいです。(cobolの仕様が作られたのはなんと1959年。
おじさんの生まれる前!)
正書法ではFortran同様、1行の中の書き方に以下のようなうるさい決まりがあります。
1-6桁 一連番号領域  プログラムの行を書く
7    識別領域     * を書くと注釈行とみなされる
                - を書くと前の行からの継続行とみなされる
8-11  A領域      部、節、段落の見出し、レベル番号01
12-   B領域      その他

古式ゆかしい正書法の書き方

000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      HELLO_WORLD.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070*
000080 PROCEDURE                        DIVISION.
000090     DISPLAY "Hello world!"  UPON CONSOLE.
000100     STOP RUN.



正書法はかなり堅苦しくて、これだけでCobolを投げ出したくなりますが、パソコン用のCobolは、かなり
自由度が高いものが多いようです。Tiny Cobolは記述様式は自由で1桁目から記述していいので、
今回はTiny Cobolを使って説明します。

Cobolは以下の4つの部(Division)を必ずプログラムに書かなければなりません。これもBasicなんかに
比べると、面倒な規則ですが我慢してください。書かないとコンパイルしてくれませんので。
・見出し部 IDENTIICATION DIVISION.  プログラムの見出し的なものを書くパートです
・環境部  ENVIRONMENT DIVISION.  プログラムが使用するコンピューターや入出力装置について書きます。
・データ部 DATA DIVISION.        変数の宣言をするパートと考えてください。
・手続き部 PROCEDURE DIVISION.   ここにコードを書きます。

ちょっとしちめんどくさそうですが、Tiny Cobolでは見出し部と環境部は何も書かなくてもかまいません。
まあ、Basicでも冒頭のコメント行に作者や、何のプログラムかの説明や、制作日などを記述しますが、
見出し部や環境部はそういったものです。
データ部は、変数等を宣言する部分です。C言語はじめ多くの言語で、変数は最初に宣言しないと
いけないはずです。Cobolだけが面倒なわけではないので、我慢してください。

COBOLはnaturalな英語の命令文を書くようにコーディングする、という目標に向かって生まれた
言語なので、ひとつひとつの命令文(コマンド)はまるで英語をそのまま書いているような感じですし、
文の最後には必ずピリオド[ . ]を打ちます。これは、これらの4つの宣言部でも同じです。


(1) 見出し部 IDENTIICATION DIVISION.
見出し部には、プログラム名、作者、制作日などを記述します。もちろん省略してもかまいません。
以下に一例を示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE01.
AUTHOR. T.K.asai
DATE-WRITTEN. Dec 20, 1999.

(2) 環境部 ENVIRONMENT DIVISION.
環境部には、プログラムの使用するコンピューターの機械的な特徴を記述します。
環境部は構成節 CONFIGURATION SECTION. と入出力節 INPUT-OUTPUT SECTION. とからなります。

CONFIGURATION SECTION. の中で、よく記述するのはSPECIAL-NAMES. という項目で、
ここに入出力が画面からの入出力であることを示す CONSOLE IS CRT という記述をすることが
多いと思います(というかほとんど必ずする)

INPUT-OUTPUT SECTION.では、そのプログラムが使用する入出力装置を指定します。今回は説明を
割愛して、記述する必要のある時に説明を加えたいと思います。

(3) データ部 DATA DIVISION
データ部は、一般的な言語でいうところの変数の宣言をするパートと言ってもいいでしょう。
ここだけは、省略できません。COBOLは使う変数の型と桁数を必ず宣言しなければなりません。
(他のプログラム言語に比べて、ああ、めんど、というところですね)

データ部は
ファイル節 FILE SECTION. 作業場所節 WORKING-STORAGE SECTION. 連絡節 LINKAGE SECTION.
通信節 COMUNICATION SECTION. からなります。
ファイル節FILE SECTION.は、入出力するファイル(=データ)を定義します。ファイルといってますが、
他の一般的な言語でいうと変数です。
作業場所節も、他の言語でいうと変数を定義する場所ですが、ここは入出力に関わらない変数を
定義します。すなわち、計算結果を保持するための変数とかです。

ということで、COBOLはこのデータの宣言が結構面倒です。あっもうだめ、て言う人も多いかもしれません。

では、作業場所節WORKING-STRAGE SECTION.の記述の仕方を説明します。
COBOLではデータを階層構造をもったデータとして扱えます。C言語でいうと構造体変数のイメージに
近いですが、文法の仕様が違うので、同類の機能とは言えないですね。
わかりにくいので、学校の職員数のデータを考えてみます。

データ階層構造 COBOLでの記述

学校職員
 |
 |−先生
 |  |−−男の先生数 
 |  |−−女の先生数
 |
 |−事務職員
 |  |−−男の事務職員数 
 |  |−−女の事務職員数
 |
 |−生徒
 |  |−−男子生徒数
 |  |−−女子生徒数 
WORKING-STORAGE SECTION.
01 学校職員.

   02 先生.
    03 男の先生数 PIC 9(5) VALUE 11.
    03 女の先生数 PIC 9(5) VALUE 9.

   02 事務職員.
    03 男の事務職員数 PIC 9(5).
    03 女の事務職員数 PIC 9(5).

   02 生徒
    03 男子生徒数 PIC 9(5).
    03 女子生徒数 PIC 9(5).

COBOLの記述で、01, 02, 03という数字はレベル番号と言われるもので、データ項目の階層構造
を示しています。01が最上位で、それ以下49まで使うことができます。
01は最上位の階層で、レコードと呼ばれます。

レベル番号の次ぎに記述されているのがデータ名(変数)です。手続き部で使うデータ名(変数)は
全てここで定義されていないといけません。
最後のPIC 9(5) というのはPICTURE句と呼ばれるもので、データの型(文字型、数値型)や桁数を
定義するものです。詳しくは後で説明します。
VALUE はデータ名(変数)に初期値を設定する場合に使います。パソコン用のCOBOLの多くでは
VALUEの記述を省略すると、数値変数では0、文字変数では空白が初期設定されますが、そうしない
仕様のCOBOLもあるので、VALUEも必ず記述しておくのが無難でしょう。
文字の場合は、VALUE "MOJI". のように引用符を用いて記述します。また空白を指定するときは、
VALUE SPACE . のように記述します。

上記のようなデータ階層構造を定義すると、この「学校職員」というデータ名(変数)は以下のように格納
されます。
レベル番号03の各データ名は5ケタの数値を保持できる大きさが確保され、 最上位階層であるレベル番号01
の「学校職員」というデータ名では、30ケタ分の数値が格納できる領域が確保されることになります。
VALUE句で値が指定されている場合はその数値が、VALUE句の指定がないものには0が設定されます。

学校職員
先生 事務職員 生徒
男の先生数 女の先生数 男の事務職員数 女のジム職員数 男子生徒数 女子生徒数
1 1 9 0 0 0 0

これらのデータ名(変数)はどのレベル(階層)のものも、変数としてアクセスし使用することができます。
レベル番号03の「男の先生数」を表示させると11が表示され、
レベル番号01の「学校職員」というデータ名(変数)を表示させると、30ケタの数値が表示されます。

レベル番号01のデータ名(変数)を表示させた場合の実例は
COBOL入門(はじめてのCOBOLプログラム)_階層構造のあるデータの出力
をご参照下さい。


PICTURE句の記述のルール

9 数字一文字分 5桁の数字を定義する場合は、99999 または9(5) と定義します
S +,-の符号 最初に符号のついた5桁の数は、S99999, S9(5)と定義する
V 想定の小数点位置 整数3桁、少数2桁の数は、999V99または9(3)V9(2)と定義する
X 文字1文字分(1バイト分)
日本語を入れる場合は、日本語1文字
で2バイト分になるので、Xを2文字分
用意する
5文字の英数字(1バイト文字)の場合、XXXXXまたはX(5)
N 全角文字(2バイト文字)1文字分 全角文字5文字の場合、NNNNNまたはN(5)


TopPage


inserted by FC2 system