diff --git a/cob-src/cobol.md b/cob-src/cobol.md new file mode 100644 index 0000000..192e50e --- /dev/null +++ b/cob-src/cobol.md @@ -0,0 +1,161 @@ +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 +-------------