gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
dc_args Module Reference

コマンドライン引数の解析 More...

Data Types

type  args
interface  dcargsopen
interface  dcargsclose
interface  dcargsoption
interface  dcargsputline
interface  dcargsdebug
interface  dcargshelp
interface  dcargshelpmsg
interface  dcargsstrict
interface  dcargsget
interface  dcargsnumber
interface  open
interface  close
interface  option
interface  putline
interface  debug
interface  help
interface  helpmsg
interface  strict
interface  get
interface  number

Detailed Description

コマンドライン引数の解析

Author
Youhei SASAKI, Yasuhiro MORIKAWA

コマンドライン引数の解析を行います.

加えて, ヘルプメッセージの表示に関して便利なサブルーチンも 用意しています.

チュートリアル

  • gtool5 オフィシャルチュートリアル: コマンドライン引数の解析

手続一覧

手続名 説明
DCArgsOpen 構造型 ARGS 変数の初期化
DCArgsClose 構造型 ARGS 変数の終了処理
DCArgsGet コマンドライン引数の取得
DCArgsNumber コマンドライン引数の数を返す
DCArgsOption コマンドライン引数オプションを取得するための設定
DCArgsDebug デバッグオプションの自動設定
DCArgsHelp ヘルプオプションの自動設定
DCArgsHelpMsg ヘルプメッセージの設定
DCArgsStrict 無効なオプションが指定された時に警告を表示するよう設定
DCArgsPutLine 構造型 ARGS 変数の内容を印字

使用方法

構造型 ARGS の変数を定義し, Open, Get を利用することで コマンドライン引数を取得することができます.

program dc_args_sample1
use dc_string, only: stoa
use dc_args
implicit none
type(ARGS) :: arg
character(STRING), pointer :: argv(:) => null()
integer :: i
call dcargsopen( arg = arg ) ! (out)
call dcargsdebug( arg = arg ) ! (inout)
call dcargshelp( arg = arg ) ! (inout)
call dcargsstrict( arg = arg ) ! (inout)
call dcargsget( arg = arg, argv = argv )
do i = 1, size( argv )
write(*,*) argv(i)
end do
deallocate( argv )
call dcargsclose( arg = arg ) ! (inout)
end program dc_args_sample1
コマンドライン引数の解析
Definition dc_args.f90:193
文字型変数の操作
Definition dc_string.f90:83
種別型パラメタを提供します。
Definition dc_types.f90:55

引数にオプションを指定したい場合には, DCArgsOption サブルーチンを 利用してください. オプションの書式に関しては DCArgsOption の 「オプションの書式」を参照してください.

program dc_args_sample2
use dc_string, only: stoa
use dc_args
implicit none
type(ARGS) :: arg
logical :: OPT_size
logical :: OPT_namelist
character(STRING) :: VAL_namelist
call dcargsopen( arg = arg )
call dcargsoption( arg = arg, options = stoa('-s', '--size'), &
& flag = opt_size, help = )
call dcargsoption( arg = arg, options = stoa('-N', '--namelist'), &
& flag = opt_namelist, value = val_namelist, help = )
call dcargsdebug( arg = arg )
call dcargshelp( arg = arg )
call dcargsstrict( arg = arg )
if (opt_size) then
write(*,*) 'number of arguments :: ', dcargsnumber(arg)
end if
if (opt_namelist) then
write(*,*) '--namelist=', trim(val_namelist)
else
write(*,*) '--namelist is not found'
end if
call dcargsclose( arg = arg )
end program dc_args_sample2

コマンドライン引数に '-h', '-H', '–help' のいづれかのオプションを 指定することで, オプションの一覧が標準出力に表示されます.

ヘルプメッセージの内容を充実させたい場合には DCArgsHelpMsg を 参照してください.

Note
後方互換

バージョン 20071009 以前に利用可能だった以下の手続きは, 後方互換のため, しばらくは利用可能です.

  • Open, Close, Option, PutLine, Debug, Help, HelpMsg, Strict, Get, Number
Note
dc_args モジュールを作成した理由について

Fortran コンパイラのほとんどには IARGC, GETARG といった コマンドライン引数取得のための副プログラムが用意されている. これらの副プログラムの利用によって, コマンドラインの引数を 単に取得することは簡単である.

しかしこの IARGC, GETARG の使用に際し, 2 つほど面倒な点がある.

1 つはコンパイラ依存による IARGC, GETARG の仕様の違いである. これらの副プログラムは Fortran 規格に含まれないサービスルーチン であるため, たいていのコンパイラにはこの副プログラムは 存在するものの, 仕様が微妙に異なる場合がある. (大抵のコンパイラは GETARG の第一引数を 1 にすると一つ目の引数を取得するが, 古い HITACHI のコンパイラは第一引数を 2 にしないと一つ目の 引数を取得できない, など). そこで gtool5 ライブラリでは これらのコンパイラ依存性を吸収する設計を行っている. dc_args モジュールを使用する際には, これらのコンパイラ依存は 気にしなくてよい. (なお, コンパイラ依存性を実際に 吸収しているのは sysdep モジュールである).

2 つ目は, コマンドライン引数におけるオプション引数 (-h や –version など) の取り扱いの不便さである. IARGC や GETARG は単に引数を取得するための副プログラムであり, Perl や Ruby などのインタプリタ言語のように, コマンドライン引数にオプション引数を処理するための ライブラリ (Getopt や OptionParser など) が用意されていない. dc_args モジュールは, Fortran プログラムでもオプション引数を 手軽に扱えるよう, オプション引数処理の ためのコーディングをできるだけ簡素にするべく整備したプログラムである.

設計思想は, Ruby の OptionParser を真似ており, OptionParser クラスのオブジェクトを構造型 ARGS に, new (initialize) メソッドを DCArgsOpen サブルーチンに, on メソッドを DCArgsOption サブルーチンに, parse メソッドを DCArgsGet サブルーチンに見立てている. 言語仕様の違いにより実装や仕様は それなりに異なるが, 構造型 ARGS の変数をオブジェクトに見立て, この変数に対してサブルーチンを作用させることによって オブジェクトへの操作やオブジェクトからの引数情報の取得を行うという点では OptionParser と同様である.

おまけ的機能であるが, dc_trace モジュールとの連携も図られており, Debug サブルーチンを使用することにより (使用法は上記参照), 再コン パイルすることなく, プログラムの実行の際に "-D" オプションをつける ことでデバッグメッセージを表示するモードに変更することもできる.