コマンドライン引数の利用方法
前述したコーディング例では、ファイル名をプログラム内部にハードコーディングしていました。通常は、実行時にコマンドラインで引数を設定してファイル名などを動的に取得するのが一般的な機能です。OpenCOBOLでもコマンドライン引数を利用できます。
引数を利用するための特別な変数
OpenCOBOLでは、コマンド引数を利用するために特別な変数があります。この変数は、データ部での定義は不要です。
- ARGUMENT-NUMBER…引数の個数を取得する
- ARGUMENT-VALUE…各引数の値を取得する
コーディング例
コマンドラインから引数を指定し、引数の内容を表示するプログラムのコーディング例は次のとおりです。
001000 IDENTIFICATION DIVISION. 001100 PROGRAM-ID. SAMPLE1. 001200 AUTHOR. FUSE KAKO. 001300 ENVIRONMENT DIVISION. 001400 DATA DIVISION. 001500 WORKING-STORAGE SECTION. 001600 77 ARG PIC 99. 001700 77 CNT PIC 99. 001800 77 DATA-LEN PIC 99. 001900 77 LF PIC X VALUES " ". 002000 01 DISP-NAME. 002100 03 X OCCURS 256 PIC X. 002200 PROCEDURE DIVISION. 002300 ACCEPT ARG FROM ARGUMENT-NUMBER. 002400 PERFORM VARYING CNT1 FROM 1 BY 1 UNTIL CNT > ARG 002500 ACCEPT DISP-NAME FROM ARGUMENT-VALUE 002600 PERFORM VARYING CNT FROM 1 BY 1 UNTIL X(CNT) = " " 002700 DISPLAY X(CNT) WITH NO ADVANCING 002800 END-PERFORM 002900 DISPLAY LF 002800 END-PERFORM. 002900 DISPLAY "HIT ANY KEY AND PROGRAM END". 003000 ACCEPT CMD. 003100 STOP RUN.
各機能の説明
引数の取得をする変数はACCEPT命令を使用して通常の変数に代入します。上記コーディング例では、引数の個数をARGに、それぞれの引数の値をDISP-NAMEに代入し利用しています。DISP-NAMEは引数全体が入力できるように、十分な桁数を取っておいてください。
順序番号002200で引数の個数をプログラムで定義しているARGに代入しています。順序番号002300~002800で、引数の個数分を繰り返し実行するようにして、コマンドラインで指定した引数すべてを表示するようにしています。
順序番号002400では引数の内容をプログラムで定義しているDISP-NAMEに代入しています。特に指定がない場合は、前回取得した引数の次の引数を取得することがでます。
順序番号002500~002700で代入した文字を1キャラクタずつ表示しています。DISP-NAMEに空白が現れたら表示を打ち切り、改行をして、次の引数を取得するようにしています。
コンパイルおよび実行
上記サンプルを適当なファイル名で作成してコンパイルを行い、実行ファイルを作成します。
以下は、ソースファイル名をsample1.cobとした場合の例です。
/usr/local/bin/cobc -x sample1.cob
コンパイルが問題なければ実行してみます。
[e-fuse@]$ ./sample1 test1 line2 fusekako test1 line2 fusekako HIT ANY KEY AND PROGRAM END 0 [e-fuse@]$
それぞれ指定した引数が表示されることを確認できました。
まとめ
今回は基本的な処理である「DISK to DISKプログラム」でサンプルプログラムをコーディングしOpenCOBOLの機能を確認しました。合わせてコマンドライン引数の利用方法についての機能も確認しました。
Linuxでは、これら単純なファイル処理はシェルやawkなどのツールで処理してしまうことがほとんどで、単独ではCOBOLでコーディングすることはありません。とはいえ、一連の業務処理をCOBOLで作成している場合は、メンテナンス方法の統一からあえてCOBOLで作成することも少なくはないです。実際のCOBOLプログラミングでは、外部処理を実行したり、多数のファイルやテーブルを処理したりで、このような単純な機能ばかりではありませんが、単純な機能の積み重ねで複雑な処理を理解することができると思います。
次回は、マッチング処理について、サンプルプログラムを作成しながら解説する予定です。
参考
- COBOL言語をLinux環境で動かす:CodeZine(OpenCOBOL環境のインストール方法)
- COBOLプログラミング 基本編 :CodeZine(基本的なCOBOL言語の解説)
