はじめに
前回はLinuxにおけるOpenCOBOLの開発環境を構築しました。無事、お決まりの「Hello World」が表示されたことと思います。今回はCOBOL言語の説明をしつつ、基本的なプログラムの制御方法を解説していきます。随所でサンプルソースをつけましたので理解の参考になると思います。
前回の記事
対象読者
現在バリバリのCOBOL'erは、本記事を見るまでもなく、使用している機種の解説本をご覧になるのが懸命です。今回は、Linux環境でとりあえずCOBOLを動かしてみたいと思っている方を対象としています。
必要な環境
サンプルソースからプログラムを作成しコンパイルして内容の評価する場合は、OpenCOBOL開発環境が必要です。LinuxにおけるOpenCOBOL開発環境の構築は、前回の記事を参照ください。今回は機種、OSに依存しない部分に限定した解説が中心となりますので、ひょっとしたらそのまま動くかもしれません。しかしながら、OpenCOBOL以外でコンパイルおよび動作する保障はありません(もちろんOpenCOBOLでの動作保障もいたしません)。
基本的なCOBOLの文法 ~COBOL正書法~
1行のどの位置にどの要素を書くか、特徴である4つのDIVISIONの説明をします。
COBOL正書法(source format)
1行のどの位置にどの要素を書くかの規定を「COBOLの正書法」と言います。正書法には固定形式、可変形式および自由形式の3種類があります。
A.固定形式、可変形式
固定形式と可変形式の記述内容は同一で、違いは1行の桁数がソース全体で固定であるか可変であるかの違いとなっています。固定形式または可変形式の1行の構成は次のとおりです。
00000000011111111112222222222333333333344444444445555555555666666666677777777778 12345678901234567890123456789012345678901234567890123456789012345678901234567890 <- 1->2<-3-><------------------------4---------------------------------><--5---> 1.一連番号領域 2.標識領域 3.A領域 4.B領域 5.プログラム識別番号領域
OpenCOBOLでは、固定形式、可変形式の区別は特にないようです。デフォルトのコンパイルオプションは、ソースの形式が固定形式、可変形式となっています。記述する内容は以下になります。
1.一連番号領域(1桁目~6桁目)
一連番号領域はCOBOLソースの行を識別するために使用します。一般的には連番の数値を記述する場合が多いですが、数値である必要はまったく無く任意の文字を記述できます。記述する内容はユニークでなくともかまいません。もちろん、記述は必須では無くブランクでも構いません。
000020* 000010*降順で並んでいても問題なし *ブランクでも問題なし ABCDEF*数値以外でも問題なし 000010*既に記述済みのものでも問題なし
紙カードは上下左右を識別できるようになっていましたが、それぞれの順序までは識別することができません。そこで、せん孔の一部を順序識別領域として、データ順となるように昇順の番号をせん孔するようになりました。
こうすることにより、万が一紙カードがばらばらになっても、前処理で読み込んだカードに対して、順序識別領域を昇順としたソート処理を行うことで意図した順序に並び替えることができます。
当初作成時には、順序番号は作成後にカードを挿入することを考慮して、10や100ごとで増加させていました。
2.標識領域(7桁目)
当該行が、注釈行・継続行・デバッグ行であるかを識別する符号を記述します。
注釈行 "*"または"/" 継続行 "-" デバッグ行 "D"
注釈行の指定は、当該行すべてが注釈行となります。また、継続行は1つ前の行の最終文字位置までと当該行の記述内容を連結させてコンパイル対象とします。
3.A領域(8桁目~12桁目)
部の見出し・節の見出し・段落の見出し・レベル指示語・レベル番号の01および77・宣言部分の開始・プログラム終わり見出しを記述します。ただしOpenCOBOLでは後述の「B領域」と区別が無く、B領域で記述する内容を書いてもコンパイルエラーとはなりません。
なお標識領域に注釈行として記述した場合は、当項目は注釈となります。
4.B領域(13桁目~72桁目)
A領域で記述する内容以外の文を記述します。
なお標識領域に注釈行として記述した場合は、当項目は注釈となります。
5.プログラム識別番号領域(73桁目~80桁目)
固定形式の場合に記述できます。記述内容は「一連番号領域」と同様です。
B.固定形式、可変形式のフォーマット例
固定形式、可変形式のフォーマット例は次のとおりです。
000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. SAMPLE. 000030 ENVIRONMENT DIVISION. 000040 DATA DIVISION. 000050 FILE SECTION. 000060 WORKING-STORAGE SECTION. 000070 01 REC-DATA. 000080 03 FIRST-COR PIC 9(5). 000090 03 FILLER X(75). 000100*THIS LINE IS COMMENT 000110 PROCEDURE DIVISION. 000120 DISPLAY "Hello World!!". 000130 STOP RUN.
C.自由形式
固定形式や可変形式の一連番号領域、標識領域が無く、自由に記述できます。行頭を*
とすると当該行はコメント行となります。行の途中で*>
と記述すると、当該桁以後はコメントとなります。
自由形式で作成したCOBOLソースをOpenCOBOLでコンパイルする場合は、コンパイルオプションは-free
とします。
IDENTIFICATION DIVISION. PROGRAM-ID. FREE-SAMPLE. ENVIRONMENT DIVISION. DATA DIVISION. * WORKING-STORAGE SECTION. 01 IN-REC. *> INPUTDATA 03 INPREC1 pic x(40). 03 INPREC2 pic x(20). * PROCEDURE DIVISION. DISPLAY "Hello World!!". MOVE ZERO TO RETURN-CODE. STOP RUN.