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

2.1.1 名前付きファイルに探査する

OPEN 文の FILE= 指定子は、実行時に、名前付き物理ファイルへの論理ユニットの関連付けを行います。ファイルはあらかじめ存在しているものでもかまいません。また、プログラムの実行時に作成することもできます。

OPEN 文の FILE= 指定子は、簡単なファイル名 (FILE='myfile.out') を指定することも、絶対ディレクトリパスか相対ディレクトリパスを前に付けたファイル名 (FILE='../Amber/Qproj/myfile.out') を指定することもできます。また、指定子は、文字定数、変数、文字式のどれでもかまいません。

ライブラリルーチンを使用して、コマンド行引数と環境変数を文字変数としてプログラムに渡し、OPEN 文でファイル名として使用できます。

次の例 (GetFilNam.f) は、入力された名前から絶対パスファイル名を作成する 1 つの方法を示しています。このプログラムは、ライブラリルーチンの GETENVLNBLNKGETCWD を使用して $HOME 環境変数の値を返し、文字列中の最後の空白以外の文字を見つけ、現在の作業用ディレクトリを決定します。


      CHARACTER F*128, FN*128, FULLNAME*128
      PRINT*, 'ENTER FILE NAME:'
      READ *, F
      FN = FULLNAME( F )
      PRINT *, 'PATH IS: ',FN
      END

      CHARACTER*128 FUNCTION FULLNAME( NAME )
      CHARACTER NAME*(*), PREFIX*128
C           これは、C シェルを仮定しています。
C           絶対パス名は変更しません。
C           '~/' で名前を始めると、チルド (~) はホームディレクトリに
C           置換されます。
C           それ以外の場合、現在のディレクトリのパスを
C           相対パス名の前に置きます。
      IF ( NAME(1:1) .EQ. '/' ) THEN
            FULLNAME = NAME
      ELSE IF ( NAME(1:2) .EQ. '~/' ) THEN
            CALL GETENV( 'HOME', PREFIX )
            FULLNAME = PREFIX(:LNBLNK(PREFIX)) //
     1                     NAME(2:LNBLNK(NAME))
      ELSE
            CALL GETCWD( PREFIX )
            FULLNAME = PREFIX(:LNBLNK(PREFIX)) //
     1                     '/' // NAME(:LNBLNK(NAME))
      ENDIF
      RETURN
      END

GetFilNam.f のコンパイルと実行の結果は、次のようになります。


demo% pwd
/home/users/auser/subdir
demo% f95 -o getfil GetFilNam.f
demo% getfil
 ENTER FILE NAME:
getfil
 PATH IS: /home/users/auser/subdir/atest.f

demo%

これらのルーチンについての詳細は、「2.1.4 ファイル名をプログラムに渡す」を参照してください。また、getarg(3F)、getcwd(3F)、および getenv(3F) のマニュアルページも併せて参照してください。『Fortran ライブラリ・リファレンス』には、そのほかの実用的なライブラリルーチンについても記述されています。