Fortranでは2003からコマンドライン引数処理のための内部手続きが正式に用意されています \(^o^)/
とっても便利なのですが、コマンドライン文字列を受け取って適当に処理して変数に値を渡す処理を書くのはなんにしても面倒です。ところで、Fortranでは変数の値の入出力をするための仕掛けとしてnamelistなるものがあります。これを使うと入力の順番を気にする必要がなくなったり、必要となる変数にのみ値を与えたりすることができます。
でこないだ気付いたのですが、これら2つを組み合わせるとなかなか使い勝手が良くなります。
program main
character(len=1024) :: buf,text
integer :: n,nlen
integer :: a,b,c ! パラメータ変数の定義
namelist /param/ a,b,c ! パラメータ変数をnamelistに登録
a = 1 ; b = 2 ; c = 3 ! パラメータのデフォルト値の設定
call get_command_argument(0,buf,n) ! コマンド名の文字数を取得する
call get_command(buf,nlen) ! コマンド入力全体を取得する
text = '¶m ' // buf(n+2:nlen) // '/' ! コマンド名を除外する
read(text,param) ! namelistでパラメータを読む
write(*,*) 'a = ',a,', b = ',b,', c = ',c
end program main
\$ ./commandline
a = 1 , b = 2 , c = 3
\$ ./commandline b=4
a = 1 , b = 4 , c = 3
のような使い方ができます。
…と自分自身に言い聞かせてみるメモ。
0 件のコメント:
コメントを投稿