Sun Studio 12: Fortran プログラミングガイド

2.1.4 ファイル名をプログラムに渡す

ファイルシステムは、Fortran プログラム中の論理ユニット番号を自動的に物理ファイルに関連付けるための機能を持っていません。

しかし、Fortran プログラムにファイル名を渡す方法はいくつかあります。

2.1.4.1 実行時引数と GETARG を経由する

ライブラリルーチン getarg(3F) を使用して、実行時にコマンド行引数を文字変数に読み込むことができます。引数はファイル名として解釈され、OPEN 文の FILE= 指定子で使用されます。


demo% cat testarg.f
         CHARACTER outfile*40
C  ユニット 51 の出力ファイル名として最初の引数を取得する
         CALL getarg(1,outfile)
         OPEN(51,FILE=outfile)
         WRITE(51,*)  'Writing to file: ', outfile
         END
demo% f95 -o tstarg testarg.f
demo% tstarg AnyFileName
demo% cat AnyFileName
 Writing to file: AnyFileName
demo%

2.1.4.2 環境変数と GETENV を経由する

同様に、ライブラリルーチン getenv(3F) を使用して、実行時に環境変数の値を文字変数に読み込むことができます。この値はファイル名として解釈されます。


demo% cat testenv.f
         CHARACTER outfile*40
C  ユニット 51 の出力ファイル名として $OUTFILE を取得する
         CALL getenv('OUTFILE',outfile)
         OPEN(51,FILE=outfile)
         WRITE(51,*) 'Writing to file: ', outfile
         END
demo% f95 -o tstenv testenv.f
demo% setenv OUTFILE EnvFileName
demo% tstenv
demo% cat EnvFileName
 Writing to file: EnvFileName
demo%

getarg または getenv を使用するときには、前後の空白に気をつけるようにしてください。Fortran 95 プログラムは組み込み関数 TRIM を使用でき、古い FORTRAN 77 はライブラリルーチン LNBLNK() を使用できます。この章のはじめにある例の FULLNAME 関数行を用いれば、相対パス名を利用できるようにもプログラムできます。

2.1.4.3 コマンド行における入出力のリダイレクトとパイプ

物理ファイルをプログラムの論理ユニット番号と関連付けるもう 1 つの方法は、あらかじめ接続された標準入出力ファイルをリダイレクトまたはパイプする方法です。リダイレクトやパイプは、実行時の実行コマンド上で行われます。

この方法において、標準入力 (ユニット 5) を読み取り、標準出力 (ユニット 6) か標準エラー (ユニット 0) に書き込むプログラムはリダイレクト、つまりコマンド行上で <, >, >>, >&, |, |&, 2>, 2>&1 を使用することによって、ほかの名前付きファイルを読み取ったり、書き込んだりできます。

これを次の表に示します。

表 2–1 csh/sh/ksh のコマンド行におけるリダイレクトとパイプ

処理 

C シェルを使用する場合 

Bourne または Korn シェルを使用する場合 

標準入力 — mydata から読み取る 

myprog < mydata

myprog < mydata

標準出力 — myoutput に書き込む(上書き) 

myprog > myoutput

myprog > myoutput

標準出力 — myoutput に書き込む(追加) 

myprog >> myoutput

myprog >> myoutput

標準エラーをファイルにリダイレクトする 

myprog >& errorfile

myprog 2> errorfile

標準出力をほかのプログラムの入力としてパイプする 

myprog1 | myprog2

myprog1 | myprog2

標準エラーと標準出力をほかのプログラムにパイプする 

myprog1 |& myprog2

myprog1 2>&1 | myprog2

コマンド行におけるリダイレクトとパイプについての詳細は、cshksh、および sh のマニュアルページを参照してください。