|
2.12.4 ファイル名と検索
ファイル名の付け方は厳密にはコンピュータの機種によって異なる.しかし,Mathematicaはすべてのシステムで機能するかなり汎用性のあるメカニズムを提供する.
1.11.2で述べたように,Mathematicaではすべてのファイルはディレクトリの階層に分けられて保存されている.特定のファイルを探し出すには,Mathematicaはそのファイル名と,それが属するディレクトリとを知らなければならない.
特定の時点では,ユーザは現ディレクトリ (current working directory)にいて,そこからの相対位置としてディレクトリを指定することができる.例えば,現ディレクトリにあるファイルには,ディレクトリの指定を省略して,単にファイル名を指定するだけでアクセスできる.

ディレクトリ操作
現ディレクトリを表示する.
In[1]:= Directory[ ]
Out[1]= /users/sw
サブディレクトリ Packagesを現ディレクトリに設定する.
In[2]:= SetDirectory["Packages"]
Out[2]= /users/sw/Packages
現ディレクトリが更新された.
In[3]:= Directory[ ]
Out[3]= /users/sw/Packages
前のディレクトリに戻る.
In[4]:= ResetDirectory[ ]
Out[4]= /users/sw
SetDirectoryを実行するとき,ディレクトリ名はオペレーティングシステムに合わせた形式で指定することができる.例えば,Unixシステムでは,ディレクトリの階層の 1つ上のレベルのディレクトリは ..で指定でき,ホームディレクトリは ~で指定できる.
SetDirectoryで指定するディレクトリに移行するときはいつでも,Mathematicaはそれまでにいたディレクトリを記憶しておく.ResetDirectoryによって,このディレクトリに戻ることができる.一般に,Mathematicaはディレクトリのスタックを DirectoryStack[ ]に保存している.SetDirectoryを実行するたびに新たなディレクトリがこのスタックに追加され,ResetDirectoryを実行するたびに対応するディレクトリがスタックから削除される.

特別なディレクトリ
特定のファイルを指定すると,Mathematicaはそのファイルをいくつかのステップで検索する.まず初めに,オペレーティングシステムまたはシェルに標準の様式を使う.
Mathematicaは指定したファイル名をスキャンし,*,$,~,?,[,", \,'等の特殊文字が含まれているかどうかを調べる.特殊文字が見付かれば,ファイル名全体をオペレーティングシステムまたはシェルに引き渡して解釈を促す.Unixシステムでは name*や $VAR等は,この時点で展開される.しかし一般に,Mathematicaはオペレーティングシステムまたはシェルが返す出力を取り,これをファイルのフルネームとみなす.
出力ファイルについては,これが Mathematicaの行う処理のすべてである.Mathematicaが指定したファイルを見出せないときは,その名前のファイルを新たに作り出す.
ファイルから入力を得ようとする場合,Mathematicaはさらに次の処理をする.実行しようとしている関数のオプション Pathの値を参照し,それに指定された検索パスを探す.デフォルトでPathには大域変数 $Pathが指定されている.

ファイルの検索パス
一般に,大域変数 $Pathにはディレクトリを表す文字列のリストが割り当てられている.入力ファイルを指定すると,Mathematicaはこのリストに現れるディレクトリを順に現ディレクトリに移し,その中に要求されたファイルがあるかどうかを調べる.
$Pathの典型的な設定.現ディレクトリ (.)とホームディレクトリ(~)が初めに現 れる.
In[5]:= $Path
Out[5]= {., ~, /users/math/bin, /users/math/Packages}

ファイル検索におけるディレクトリ指定
現ディレクトリにある拡張子 .mをもつすべてのファイルのリスト.
In[6]:= FileNames["*.m"]
Out[6]= {alpha.m, control.m, signals.m, test.m}
現ディレクトリにあって,aで始まる名前をもつファイルと,サブディレクトリにあってPで始まる名前をもつファイル.
In[7]:= FileNames["a*", {".", "P*"}]
Out[7]= {alpha.m, Packages/astrodata, Packages/astro.m,
Previous/atmp}
FileNamesはファイル名を表す文字列のリストを返す.現ディレクトリにないファイルを示すときは,現ディレクトリからの相対パスで表したファイル名となる.すべてのファイル名はそれが作られたコンピュータシステムにおけるフォーマットで与えられる.

ファイル名の操作
異なるコンピュータシステムでは異なる方法でファイル名が作られることに注意する.したがって,例えば,Windowsシステムでは dir:\dir\#dir\#nameの形の名前が使われ,Unixシステムではdir/dir/nameの形の名前が使われ,Macintoshシステムでは :dir:dir:nameの形の名前が使われる.関数 ToFileNameは使っているコンピュータに合わせて適切なファイル名を作る.
ファイル名のディレクトリの部分を返す.
In[8]:= DirectoryName["Packages/Math/test.m"]
Out[8]= 
同じディレクトリの別のファイルのフルネームを作る.
In[9]:= ToFileName[%, "abc.m"]
Out[9]= 
関連ファイルの組を作るに際して,1つのファイルを読むときに別のファイルを参照できるようにしておくと便利なことがある.大域変数 $Inputはいま入力が読み込まれているファイル名を与える.DirectoryNameと ToFileNameを使って,関連する他のファイル名を指定することができる.

Mathematicaで読み込み中のファイルの参照法
|