レガシーな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.