Newer
Older
langhist-study / cob-src / cobol.md
@HIROSE Yuuji HIROSE Yuuji on 2 Dec 2019 2 KB add cobol.md
COBOL
======

歴史
-----
* 1960年アメリカ

4つの部
-------
* IDENTIFICATION DIVISION  
  プログラム全体の見出し

* ENVIRONMENT DIVISION  
  データベースへのアクセスのための記述など (DB名とテーブル名)

* DATA DIVISION  
  データの型、変数宣言など

* PROCEDURE DIVISION  
  処理する内容

ファイル、レコード、項目
------------------------
* ファイル  
  レコードの集合
* レコード
  1件分のデータ
* 項目  
  基本項目と集団項目
  「20191120」→「2019」年「11」月「20」日

コーディング
------------
* 1〜6桁目  
  一連番号
* 7桁目  
  標識領域
	  * アスタリスク=コメント
	  * スラッシュは改ページ
	  * ハイフンは継続行(通常使用しない)
* 8から11桁目 = A領域  
  部、節、段落、FD項、01レベルのレベル番号を記述する場合  
  FD項=ファイルを使用する場合の宣言など
* 12〜72桁目 = B領域  
  固定形式と可変形式によって違う  
  可変形式は(富士通の場合)223桁
* 行内コメントは *> で書く

利用できる語
------------
````
文字の組 - 文字列 - 予約語
                    利用者語
                    定数 (数字定数/文字定数/表意定数)
           分離符   利用者語
````

予約語= MOVE, WRITE, SECTION, DIVISION, ...
利用者語=プログラマが自由に定義できる

* プログラム名
* ファイル名
* ファイル識別名
* レコード名
* データ項目名
* 節名

````
MOVE ZERO TO WORK-AREA		(数値としてのゼロクリア)
MOVE SPACE TO WORK-AREA		(文字列としての空白)
INITIALIZE WORK-AREA		(型に応じたクリア)
````

予約語
------
データ部
````
PICTURE
01		9が数字
	999V999
	X(5) 文字列5桁
	N(8) 日本語の桁数
````

* OCCURS  
  その回数くり返す(配列のようにまとめて確保)

	01 WORK-YOJI-DATA OCCURS 10.
	 02 HYOJI-ID	PIC 99.
	 02 HYOJI-DATE	PIC 99(8).
	 02 HYOJI-NAIYO	PIC X(20).


手続部
------

````
MOVE a TO b.
READ URIAGE-F.
MOVE URIAGE-TOKUI TO GOKEI-TOKUI.


COMPUTE var = exp.

DISPLAY value " and " 123
````



````
PERFORM
	PERFORM SUBROUTINE 10 TIMES.
	PERFORM SUBROUTINE UNTIL VAR >= 10.
	PERFORM SUBROUTINE.
	SUBROUTINE.
       処理.
       処理.
	NEXTROUTINE.

PERFORMにWHILEはない
PERFORM VARYING
	PERFORM VARYING FROM 1 BY 1 UNTIL WORK-COUNTER > 10
	   処理
	END-PERFORM.

ADD 1 TO VAR
SUBTRACT 1 TO VAR

DIVIDE 除数 INTO HOGE-A GIVING HOGE-AMARI.
被除数の変数は必ず破壊される

NOT =
NOT EQUAL
````

IF文
----
````
IF HOGE-AMARI = 1 THEN
  DISPLAY 'KISU'
ELSE
  DISPLAY 'GUSU'
END-IF.
````


EVALUATE
----------
````
MOVE 60 TO HOGE-A.
EVALUATE HOGE-A
WHEN 0 THRU 50
  処理
WHEN 50 THRU 100
WHEN OTHER
  処理
END-EVALUATE.
````

Hello, world
-------------