COBOL2002 ユーザーズガイド

[目次][用語][索引][前へ][次へ]

10.3.2 引数を個別に取得する方法

機能名ARGUMENT-NUMBERおよびARGUMENT-VALUEを使うことで,コマンド行に指定された引数の個数を取得できます。また,コマンド名称や,複数の引数の個々の値を取得できます。

<この項の構成>
(1) コマンド行の引数の個数を取得する
(2) コマンド行のファイル名称,引数の値を取得する(順読み込み)
(3) コマンド行のファイル名称,引数の値を取得する(乱読み込み)
(4) 規則
(5) プログラム例

(1) コマンド行の引数の個数を取得する

コマンド行の引数の個数を取得するには,ACCEPT文を使用します。

形式(引数の個数の取得)
ACCEPT 一意名1 FROM 呼び名1
        〔END-ACCEPT〕
注※
呼び名1は,環境部の特殊名段落で,ARGUMENT-NUMBERに関連づけておく必要があります。

(2) コマンド行のファイル名称,引数の値を取得する(順読み込み)

コマンド行のファイル名称および引数の値を,コマンド行の先頭から順番に読み出して取得するには,ACCEPT文を使用します。

形式(ファイル名称または引数の値の順読み出し)
ACCEPT 一意名2 FROM 呼び名2
        〔ON EXCEPTION 無条件文1〕
        〔NOT ON EXCEPTION 無条件文2〕
        〔END-ACCEPT〕
注※
呼び名2は,環境部の特殊名段落でARGUMENT-VALUEに関連づけておく必要があります。

(3) コマンド行のファイル名称,引数の値を取得する(乱読み込み)

コマンド行のファイル名称および引数の値を,コマンド行の任意の位置から読み出して取得するには,最初にDISPLAY文を使用して読み出す位置を指定し,次にACCEPT文を使用してファイル名称または引数の値を読み出します。

形式(読み出し位置の指定)
DISPLAY  {一意名3|整数1}  UPON 呼び名1※1
         〔END-DISPLAY〕

形式(指定位置からのファイル名称または引数の値の読み出し)
ACCEPT 一意名2 FROM 呼び名22
        〔ON EXCEPTION 無条件文1〕
        〔NOT ON EXCEPTION 無条件文2〕
        〔END-ACCEPT〕
注※1
呼び名1は,環境部の特殊名段落でARGUMENT-NUMBERに関連づけておく必要があります。
注※2
呼び名2は,環境部の特殊名段落でARGUMENT-VALUEに関連づけておく必要があります。

(4) 規則

(1)(2)(3)に共通する規則
  • コマンド行へのアクセスができるのは,-Main,Systemオプションを指定したCOBOL主プログラムと,主プログラムに-Main,Systemオプションを指定したCOBOLプログラムを持つCOBOLの副プログラムでだけです。
    コマンド行へのアクセスを使用しているCOBOL主プログラムに-Main,V3オプションを指定した場合,コンパイルエラーとなります。また,COBOL副プログラムに,-Main,Systemオプションを指定したCOBOL主プログラム以外のプログラムを持つ場合,実行時にエラーメッセージが出力され異常終了します。

(1)の形式での規則
  • 引数および引数の個数を取得するときの転記規則を次に示します。
    転記規則
  • 引数は,一意名の左端から順に転送されて転記されます。
  • 引数が一意名の領域より長い場合,一意名の長さで区切られます。
  • 引数が一意名の領域より短い場合,標準コードの空白文字(X'20')が埋められます。
  • コマンド行に引数を指定していない場合,ACCEPT文で取得する引数の個数は0になります。

(2)の形式での規則
  • 順読み込みで引数を取得するときに,実行単位で最初に取得する引数は,実行可能ファイル名の次に指定された第1引数になります。
  • 順読み込みで引数を取得する場合,上位プログラムで引数を取得し,さらに下位プログラムで引数を取得するときは,上位プログラムで最後に取得した引数の次の引数になります。

(3)の形式での規則
  • 乱読み込みで引数を取得する場合,引数の位置を指定するDISPLAY文と指定した位置の引数を取得するACCEPT文は,プログラム間にわたって指定できます。
  • 一意名3の内容または整数1に0を指定し,ACCEPT文で引数を取得した場合,実行可能ファイル名を取得します。
  • コマンド行に指定した実行可能ファイル名を取得するときは,入力した文字列のまま取得されます。

(5) プログラム例

コマンド行の引数および引数の個数を取得する方法を,プログラム例を使って説明します。

実行時のコマンド行指定
SAMPLE1.EXE AAA BBB CCC DDD EEE FFF

プログラム例1
コマンド行の引数および引数の個数を取得する例を示します。
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE1.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       ARGUMENT-NUMBER IS ARGNUM
       ARGUMENT-VALUE  IS ARGVAL
           :
       WORKING-STORAGE SECTION.
       01 ARGCNT  PIC 99.
       01 ARGDATA PIC X(10).
       PROCEDURE DIVISION.
           :
           ACCEPT ARGCNT FROM ARGNUM.   …1.
           :
           ACCEPT ARGDATA FROM ARGVAL   …2.
                  ON EXCEPTION 〜
                  NOT ON EXCEPTION 〜
           END-ACCEPT.
           :
           DISPLAY 3 UPON ARGNUM.       …3.
           ACCEPT ARGDATA FROM ARGVAL   …4.
                  ON EXCEPTION 〜
                  NOT ON EXCEPTION 〜
           END-ACCEPT.
           :
  1. コマンド行に指定した引数の個数6を取得します。
  2. コマンド行に指定した引数'AAA'を取得します。
  3. コマンド行に指定した3番目の引数位置を設定します。
  4. 3.のDISPLAY文で指定した3番目の引数'CCC'を取得します。

プログラム例2
順読み込みで,引数の取得がプログラム間にわたるときに,コマンド行の引数および引数の個数を取得する例を示します。
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE1.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       ARGUMENT-VALUE IS ARGVAL
           :
       WORKING-STORAGE SECTION.
       01 DATA1 PIC X(10).
       PROCEDURE DIVISION.
           :
           ACCEPT DATA1 FROM ARGVAL …1.
                  ON EXCEPTION 〜
                  :
                  NOT ON EXCEPTION 〜
                  :
           END-ACCEPT.
           CALL 'SAMPLE2'.
           :
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE2.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       ARGUMENT-VALUE IS ARGVAL
           :
       WORKING-STORAGE SECTION.
       01 DATA1 PIC X(10).
       PROCEDURE DIVISION.
           :
           ACCEPT DATA1 FROM ARGVAL …2.
                  ON EXCEPTION 〜
                  :
                  NOT ON EXCEPTION 〜
                  :
           END-ACCEPT.
           :
  1. コマンド行に指定した第1引数'AAA'を取得します。
  2. コマンド行に指定した第2引数'BBB'を取得します。

プログラム例3
順読み込みで,引数の取得がプログラム間にわたるときに,コマンド行の引数および引数の個数を取得する例を示します。
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE1.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       ARGUMENT-NUMBER IS ARGNUM
           :
       WORKING-STORAGE SECTION.
           :
       PROCEDURE DIVISION.
           :
           DISPLAY 3 UPON ARGNUM. …1.
           :
           CALL 'SAMPLE2'.
           :
 
       IDENTIFICATION DIVISION.
       PROGRAM-ID. SAMPLE2.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       ARGUMENT-VALUE IS ARGVAL
           :
       WORKING-STORAGE SECTION.
       01 DATA1 PIC X(10).
       PROCEDURE DIVISION.
           :
           ACCEPT DATA1 FROM ARGVAL …2.
                  ON EXCEPTION 〜
                  :
                  NOT ON EXCEPTION 〜
                  :
           END-ACCEPT.
           :
  1. コマンド行に指定した第3引数の引数位置3を指定します。
  2. 1.のDISPLAY文で指定した第3引数'CCC'を取得します。