Variables as arguments in Fortran 77つまり call system() を使うことは使うが、文字列を用意して、そこにコマンドも含めて何もかも内部入出力で書き込んでしまうという力技。
http://www.linuxforums.org/forum/programming-scripting/154686-variables-arguments-fortran-77-a.html
具体的には、
program test
implicit none
integer :: i
character(len=72) :: command
!! -----------------------------
do i=1,100
write(command,"('mkdir ',i3.3)") i !! コマンドごと書き込む
call system(command) !!
enddo
stop
endprogram test
ということ。
自分は実際には、mkdir_if_not_exist.sh という、そのディレクトリがあるかどうかを調べてないときだけ作るスクリプトを作って、それを呼び出している。それの中身はこんな感じ:
mkdir_if_not_exist()
{
echo -n "Checking if $1 directory exists... "
if [ ! -d $1 ] ; then
echo -n "... the directory does not exist ... Making a directory $1... "
mkdir $1
echo "... done."
else
echo "... the directory already exists."
fi
}
これの参照元は、いろんなページを参考にした気がするがメモるの忘れてたかも…(はてブには残ってるだろうが)。まぁこの程度なら著作物性はなさそうなのでいいかな…?
なお、シェルスクリプトファイルを置いているのは実行ファイル(a.out 的な)よりも一つ下の ./src の中であり、また、ディレクトリを作りたいのは ./output の下なので、上記の内部入出力 write 文のところは実際には、
write(command,"('sh ./src/mkdir_if_not_exist.sh ./output/',i3.3)") i !! コマンドごと書き込む
という感じにしている。
No comments:
Post a Comment