レガシーなCOBOLから別言語に移行したい。
COBOLを読むために最低限のCOBOL知識が必要というのが学習のモチベーション。
COBOLの構成
以下4部で構成。
- 見出し部(IDENTIFICATION DIVISION)
- プログラム名、作成者名、作成日などが書かれる
- 環境部(ENVIRONMENT DIVISION)
- 環境変数、ファイルなどが書かれる
- データ部(DATA DIVISION)
- 変数定義、ファイルレイアウトなどが書かれる
- 手続き部(PROCEDURE DIVISION)
- 処理が書かれる
命令文
- DISPLAY
- 表示内容をコンソールに出力する
- ACCEPT
- キーボードからの入力を受け取る
- IF~THEN
- 条件分岐
- EVALUATE
- 条件分岐(switch文のような)
- PERFORM UNTIL
- 繰り返し
- PERFORM VARYING UNTIL
- 繰り返し(VARYINGにより、カウンタが自動的にカウントアップ)
- PERFORM TIMES
- 繰り返し(固定回数の繰り返し)
データ定義
以下のように定義する。
レベル番号 変数名 PIC 型(桁数)
例:01 I PIC 9(3).
聞きなれないレベル番号は、階層を表す。
集団項目をみるとイメージがつく。
01 EMP.
03 NMB PIC 9(5).
03 NAME PIC X(40).
データ型
- 数値
- 9:数字。例えば、9(5)と書くと、数字5桁という意味になる。
- S:符号。例えば、S9(2)と書くと、負数を扱える数字2桁という意味になる。
- V:小数点の位置。例えば、9(5)V9(2)と書くと、整数部5桁小数部2桁という意味になる。
- 英数字
- X:任意の文字(英字、数字、空白含む)。例えば、X(40)と書くと、任意の文字40桁という意味になる。
- X:任意の文字(英字、数字、空白含む)。例えば、X(40)と書くと、任意の文字40桁という意味になる。
- 書式編集
- Z:指定桁数に満たない場合、空白に置換え。例えば、Z(3)のように書く。
- ,:カンマが挿入される文字位置。例えば、9(5),9(2)のように書くと、数字5桁,数字2桁という意味になる。
コード例
COBOLでFizzbuzzのコード例。
IDENTIFICATION DIVISION.
PROGRAM-ID. FIZZBUZZ.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 9(3).
01 FIZZ PIC 9(1).
01 BUZZ PIC 9(1).
PROCEDURE DIVISION.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100
COMPUTE FIZZ = FUNCTION MOD(I 3)
COMPUTE BUZZ = FUNCTION MOD(I 5)
IF FIZZ = 0 AND BUZZ = 0
DISPLAY "FizzBuzz"
ELSE IF FIZZ = 0
DISPLAY "Fizz"
ELSE IF BUZZ = 0
DISPLAY "Buzz"
ELSE
DISPLAY I
END-IF
END-PERFORM
STOP RUN.