Mathematica ファイルの読み書き
特に,テキスト型インターフェースの
Mathematica を使うとき,
Mathematica 式の定義や結果の書かれたファイルを読み書きする必要が生じる.これをどのように行うかは,
「Mathematica ファイルの読込みと書出し操作」で一般的に述べられている.さらに,この節においても詳述されている.
| <<file または Get["file"] | ファイルを Mathematica の入力 式として読み込み,評価の結果を返す |
| FilePrint["file"] | ファイル内容の表示 |
ファイルの読込み
ファイルを読み込み,式として評価してその結果を返す.
| Out[2]= |  |
|
指定のファイルが見付からないとき Mathematica はメッセージを表示し, $Failedを返す.
| Out[3]= |  |
|
Mathematica の読み込むファイルには任意の個数の式が書かれていてもよい.しかしそれぞれの式は新たな行に書かれていなければならない.同一の式は何行にも渡って書かれていても構わない.標準的な対話的
Mathematica セッションと同様,式は完成されると同時に評価される.しかし,対話的なセッションと異なり,ファイルに入力式を書く場合は任意の場所に空行を書いてもよく,これは無視される.
<<file によってファイルを読むと,
Mathematica はこれを評価した最終的な結果を返す.このときの表示を抑制するには,ファイルの最後の式の末尾をセミコロンとすればよい.あるいは明示的に最後に
Nullと書いてもよい.
Mathematica がファイルを読み込んでシンタックスエラーに出会うと,エラーを表示しファイルの残りの部分を無視し,
$Failedを返す.シンタックスエラーがパッケージの途中で生じると,ここでは
BeginPackage等のコンテキスト操作関数が使われているが,
Mathematica はパッケージが読まれる前のコンテキストに復帰しようと試みる.
| expr>>file または Put[expr,"file"] | 式をファイルに書き出す |
| expr>>>file または PutAppend[expr,"file"] |
| 式をファイルに追記する |
ファイルへの式の書出し
expr>>>file とすると,
Mathematica は新しい式をファイルの最後に付け加える.しかし
expr>>file ではファイルの内容を捨て,新しい
expr をファイルに上書きする.
>>または
>>>によってファイルに式を書くと,式は普通
Mathematica の入力形で書かれる.したがってこの式を後で読み込んで評価することができる.しかし別のフォーマットで式を保存することもできる.それには書いた式を
OutputForm等のフォーマット指示子に入れてやる.
ファイル tmpに書かれた式は出力形であることを見る. |
ファイルを使う理由の多くは,後の
Mathematica セッションで読み込んでまた使うために,
Mathematica オブジェクトの定義を保存しておくためである.
>>や
>>>等のオペレータで
Mathematica の式をファイルに保存することができる.また,関数
Saveを使えば,
Mathematica オブジェクトの完全な定義を,後の
Mathematica セッションで利用するのに適した形で保存できる.
| Save["file",symbol] | 記号の完全な定義をファイルに保存 |
| Save["file","form"] | 名前が文字列のパターンform にマッチする記号の定義をファイルに保存 |
| Save["file","context`"] | 指定したコンテキストのすべての記号の定義を保存 |
| Save["file",{object1,object2,...}] | 複数のオブジェクトの定義を保存 |
定義の書出し
| Out[10]= |  |
|
新たなオブジェクトを
Mathematica で定義するとき,しばしばその定義は以前に定義した別のオブジェクトに依存することがある.今保存しようとしている定義でオブジェクトを作り出すことができるためには,その定義だけでなく,それが利用する別の定義もともに保存しておくことが重要である.関数
Saveは定義の内容をチェックし,その定義に必要な別の定義も同時に保存する.しかし,不必要に多くの式を保存するのを避けるため,
Saveは属性
Protectedを持つ記号を保存することはない.そのような記号は組み込まれていると仮定される.関連する定義も保存されるので,
Saveで書き出された出力を別の
Mathematica セッションで読み込めば,保存したときと同じオブジェクトが作られるはずである.
そのファイルは fそのものの定義だけでなく, fが使う記号 aの定義も含んでいる. |
関数
Saveは,
Mathematica の定義式を表示する
Definitionと
FullDefinitionの出力形式を使う.場合によっては,これらの出力形式を明示的に使う方が便利なこともある.
| Out[16]= |  |
|
| Out[17]= |  |
|
Mathematica に読み込ませるファイルを作るとき,読んだり編集したりできるようにテキスト形式のファイルとするのが普通である.しかし,場合によっては内容をエンコードして直接読んだり修正したりできないが,
Mathematica には読み込めるようなファイルが要求されることもある.このようなエンコードされたファイルは
Mathematica 関数
Encodeを使って作ることができる.
| Encode["source","dest"] | source ファイルをエンコードしてファイルdest に書き出す |
| <<dest | エンコードしたファイルを読み込む |
| Encode["source","dest","key"] | キーを与えてエンコード |
| Get["dest","key"] | キーを与えてエンコードしたファイルを読み込む |
| Encode["source","dest",MachineID->"ID"] |
| 特定のIDを持つコンピュータでのみ読めるエンコードしたファイルを作る |
エンコードしたファイルの読み書き
式の結果をテキスト形式でファイル tmpに書き出す. |
ファイル tmpをエンコードした形式でファイル tmp.xに書き出す. |
エンコードされたファイルの内容を見る.初めの Mathematica コメントのみが理解できる. |
ファイルはエンコードされているが, <<を使って Mathematica に読み込ませることができる.
| Out[21]= |  |
|
| DumpSave["file.mx",symbol] | 記号の定義をMathematica の内部形式で保存 |
| DumpSave["file.mx","context`"] | コンテキストに含まれるすべての記号の定義を保存 |
| DumpSave["file.mx",{object1,object2,...}] |
| コンテキストに含まれる複数の記号の定義を保存 |
| DumpSave["package`",objects] | 名前を指定した記号の定義の保存 |
定義をMathematica の内部形式で保存する方法
非常に大きな定義や複雑な定義を扱うときは,テキスト形式で保存するより
Mathematica が直接理解する内部形式で保存した方がより効率的に処理を行うことができる.内部形式で保存するには
DumpSaveを使う.
fの定義を Mathematica の内部形式で保存する.
| Out[22]= |  |
|
<<は
Mathematica の内部形式で書かれた定義も理解し,適切な処理を行う.注意すべきことは,この内部形式はコンピュータによって異なることである.したがって,あるコンピュータで作られた
.mxファイルは別のコンピュータでも読めるとは限らない.
DumpSave["package`", ...]の形式を使うと
Mathematica は定義を
package.mx/system/package.mxの名前で保存する.ここで
system はコンピュータの型を表す.
使っているコンピュータの機種を反映する名前のファイルが作られる.
| Out[24]= |  |
|
<<はそのコンピュータに合わせて適切な名前を探し出す. |