原文データの読込み
<<は,ファイルから
Mathematica の式を入力形で読み込む.しかし,ファイルから別のフォーマットで書かれたデータを読み込みたいこともある.例えば,外部のプログラムで生成され,スペースで区切られた数の列からなるデータがあるとする.このようなデータは
Mathematica の入力式としてそのまま読み込むわけにはいかない.関数
ReadListはこのようなデータをファイルまたは入力ストリームから取り込み,
Mathematica のリストに変換する.
ファイルからの数値データの読込み
| Out[2]= |  |
|
数値データを組にしたリストとしての読込み
| Out[3]= |  |
|
ファイルの各行をサブリストとしてデータを読み込む.
| Out[4]= |  |
|
ReadListはFortran形式の「
E」記法の数値を扱うことができる.例えば,
2.5E+5は
2.5
105となる.また,
ReadListは何桁の精度の数値でも扱うことができる.
Fortran形式の" E"表記の数値を含むファイル. |
| Out[6]= |  |
|
さまざまな型のオブジェクトの読込み
ReadListは数値だけでなく,その他さまざまな型のオブジェクトを読むことができる.型のそれぞれは
Numberのような記号で指定される.
それぞれの文字を1つずつ別にして,単一文字のリストとしてファイルを読み込む.
| Out[8]= |  |
|
それぞれの文字のコードをバイト数で表した数値のリストとしてファイルを読み込む.
| Out[9]= |  |
|
| Out[10]= |  |
|
読み込むオブジェクトの型指定
ファイル stringsに書かれているワードのリストを返す.
| Out[11]= |  |
|
ReadListでファイルに書かれたワードを読み込むことができる.このとき,ワードセパレータで区切られた任意の文字列がワードとみなされる.ワードセパレータはオプション
WordSeparatorsによって指定することができる.デフォルトではスペースとタブがワードセパレータとなっているが,それ以外の句読点はワードの部分とみなされる.いずれの場合も,複数のワードセパレータが続いて現れても,1つとみなされる.これらのワードセパレータは
ReadListが返すワードの部分となることはない.
ReadListのオプション
ファイル stringsのテキストをワードの列として読み込む.文字 eと .をワードセパレータとして指定.
| Out[12]= |  |
|
Mathematica はデータファイルをレコードの列からなるとみなす.デフォルトで,各行はそれぞれ独立したレコードとみなされる.一般に,レコードを区切るレコードセパレータをオプション
RecordSeparatorsで指定することができる.レコードセパレータは必ずワードも区切ることに注意する.ワードセパレータと同様,複数のレコードセパレータが続いても,1つが有効で後は無視される.レコードセパレータがレコードの一部となることはない.
デフォルトで,ファイルの各行は独立のレコードとなる.
Out[13]//InputForm= |
| |  |
|
ピリオドの改行をレコードセパレータとしてこのファイルを読み込む.
| Out[15]= |  |
|
| Out[16]= |  |
|
オプションRecordSeparatorsの設定値
そのファイル sourceの中のすべてのテキストを読み込み,結果を1つの文字列として返す.
Out[18]//InputForm= |
| |  |
|
今度はセパレータ (:と :)に囲まれた部分を独立の式としてリストにする.
| Out[19]= |  |
|
適当なセパレータを選んで,ファイルの特定の部分を選択的に読み込むことができる.
| Out[20]= |  |
|
Mathematica では普通複数個のセパレータがあっても,それらは1つのセパレータとみなされる.しかし,場合によっては複数個のセパレータがあるとき,セパレータの間には「なし」のレコードまたはワードがあるとみなしたいことがある.これは
NullRecords->Trueまたは
NullWords->Trueとすることによって実現される.
複数の連続するコロンは単一のコロンと同一視される.
| Out[22]= |  |
|
今度は連続するコロンの間は「なし」のワードとみなされる.
| Out[23]= |  |
|
ほとんどの場合,ワードはそれ自体ワードとみなされないセパレータによって区切られる.しかし,場合によっては,特殊なそれ自体ワードである「トークンワード」によってワードを区切ることが便利なこともある.トークンワードはリストとしてオプション
TokenWordsに設定すればよい.
指定したトークンワードを区切りとしてテキストをワード単位で読み込む.
| Out[25]= |  |
|
ReadListを使ってファイルから
Mathematica 式を読むことができる.一般に,それぞれの式はたとえ複数行に渡るものでも,最後は改行で終らなければならない.
Mathematica 入力式として使うことができるテキストの書かれたファイル. |
exprsの中のテキストを Mathematica の式として読み込む.
| Out[27]= |  |
|
| Out[28]= |  |
|
ReadListはそれが読み込む
Mathematica 式に任意のオブジェクトを挿入することができる.
ReadListの第2引数は,読み込むオブジェクトの型を指定する
Numberや
Word等の記号を含む任意の式からなる.したがって,例えば,
ReadList["file", {Number, Number}]は,読み込んだ数を2つずつサブリストにする.同様に,
ReadList["file", Hold[Expression]]は,読み込んだ式を
Holdの中に入れる.
ReadListが,所定のオブジェクトの1組を読み終る前にファイルの最後に達したときは,読み込まれていないオブジェクトの代りに特別な記号
EndOfFileを挿入する.
| Out[30]= |  |
|
コマンドとストリームからの読込み
Unixコマンド dateを実行し,その出力を文字列として読み込む.
| Out[31]= |  |
|
| OpenRead["file"] | ファイルからの入力ストリームを開く |
| OpenRead["!command"] | パイプからの入力ストリームを開く |
| Read[stream,type] | ストリームから指定の型のオブジェクトを読み込む |
| Skip[stream,type] | 入力ストリームの指定の型のオブジェクトを読み飛ばす |
| Skip[stream,type,n] | 入力ストリームの指定の型のn 個のオブジェクトを読み飛ばす |
| Close[stream] | 入力ストリームを閉じる |
入力ストリームからの読込みに関する関数
ReadListは所定のファイルまたは入力ストリームのすべてのデータを一度に読み込む.しかし,ときには,例えば次のデータが何かを予測しながら,1つずつ順にデータを取り込みたいことがある.
ファイルから個々のデータを読むとき,
Mathematica はファイルにおけるカレントポイント(現在地)を覚えている.
OpenReadを実行すると,
Mathematica はファイルからの入力ストリームを開き,カレントポイントをファイルの先頭に置く
Readでファイルからオブジェクトを読み込むたびに,
Mathematica はカレントポイントを読み込んだオブジェクトの直後へ移動する.
Skipを使えば,オブジェクトを読み込まずに複数のオブジェクトを飛び越してカレントポイントを移動することができる.
| Out[33]= |  |
|
| Out[34]= |  |
|
| Out[35]= |  |
|
| Out[37]= |  |
|
| Out[38]= |  |
|
ファイルの最後より先を読み込もうとすると,
Readは記号
EndOfFileを返すことに注意する.