10.3.2 引数を個別に取得する方法
機能名ARGUMENT-NUMBERおよびARGUMENT-VALUEを使うことで,コマンド行に指定された引数の個数を取得できます。また,コマンド名称や,複数の引数の個々の値を取得できます。
- 〈この項の構成〉
(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 呼び名2※2 〔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) プログラム例
コマンド行の引数および引数の個数を取得する方法を,プログラム例を使って説明します。
- 実行時のコマンド行指定
a.out 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. :
-
コマンド行に指定した引数の個数6を取得します。
-
コマンド行に指定した引数'AAA'を取得します。
-
コマンド行に指定した3番目の引数位置を設定します。
-
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引数'AAA'を取得します。
-
コマンド行に指定した第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. :
-
コマンド行に指定した第3引数の引数位置3を指定します。
-
1.のDISPLAY文で指定した第3引数'CCC'を取得します。
-