原文データの読込み

は,ファイルからWolfram言語の式を入力形で読み込む.しかし,ファイルから別のフォーマットで書かれたデータを読み込みたいこともある.例えば,外部のプログラムで生成され,スペースで区切られた数の列からなるデータがあるとする.このようなデータはWolfram言語の入力式としてそのまま読み込むわけにはいかない.関数ReadListはこのようなデータをファイルまたは入力ストリームから取り込み,Wolfram言語のリストに変換する.

ReadList["file",Number]数値の列をファイルから読み込み,Wolfram言語のリストとして返す

ファイルからの数値データの読込み

数値データのファイル.
ファイルの中の数値を読み込み,リストにする.
In[2]:=
Click for copyable input
Out[2]=
ReadList["file",{Number,Number}]ファイルから数値を読み込み,2つずつを組にしたリストとする
ReadList["file",Table[Number,{n}]]ファイルから数値を読み込み,n 個ずつを組にしたリストとする
ReadList["file",Number,RecordLists->True]
ファイルから数値を読み込み,ファイルの各行の数を組にしたリストとする

数値データを組にしたリストとしての読込み

2個ずつ組にしてデータを読み込む.
In[3]:=
Click for copyable input
Out[3]=
ファイルの各行をサブリストとしてデータを読み込む.
In[4]:=
Click for copyable input
Out[4]=

ReadListはFortran形式の「E」表記法の数値を扱うことができる.例えば,2.5E+5となる.また,ReadListは何桁の精度の数値でも扱うことができる.

Fortran形式の「E」表記の数値を含むファイル.
ReadListはこの形式の数値を読むことができる.
In[6]:=
Click for copyable input
Out[6]=
ReadList["file",type]オブジェクトの列を指定の型で読み込む
ReadList["file",type,n]n 個まで読み込む

さまざまな型のオブジェクトの読込み

ReadListは数値だけでなく,その他さまざまな型のオブジェクトを読むことができる.型のそれぞれはNumberのような記号で指定される.

テキストの書かれたファイル.
それぞれの文字を1つずつ別にして,単一文字のリストとしてファイルを読み込む.
In[8]:=
Click for copyable input
Out[8]=
それぞれの文字のコードをバイト数で表した数値のリストとしてファイルを読み込む.
In[9]:=
Click for copyable input
Out[9]=
上と同様であるが,各行を別のサブリストとする.
In[10]:=
Click for copyable input
Out[10]=
Byteデータのバイト数を表す整数
Character単一の文字を表す文字列
RealFortran形式の数値を表す近似実数
NumberFortran形式の数値を表す厳密数,または近似数
Wordワードセパレータで区切られた文字列
Recordレコードセパレータで区切られた文字列
String改行で終る文字列
Expression完全なWolfram言語の式
Hold[Expression]完全なWolfram言語の式をHoldの中に入れて返す

読み込むオブジェクトの型指定

ファイルに書かれているワードのリストを返す.
In[11]:=
Click for copyable input
Out[11]=

ReadListでファイルに書かれたワードを読み込むことができる.このとき,ワードセパレータで区切られた任意の文字列がワードとみなされる.ワードセパレータはオプションWordSeparatorsによって指定することができる.デフォルトではスペースとタブがワードセパレータとなっているが,それ以外の句読点はワードの部分とみなされる.いずれの場合も,複数のワードセパレータが続いて現れても,1つとみなされる.これらのワードセパレータはReadListが返すワードの部分となることはない.

オプション
デフォルト値
RecordListsFalseそれぞれのレコードを別々のリストとする
RecordSeparators{"\r\n", "\n","\r"}レコードセパレータ
WordSeparators{" ","t"}ワードセパレータ
NullRecordsFalse長さ0のレコードを保持するかどうか
NullWordsFalse長さ0のワードを保持するかどうか
TokenWords{}トークンとみなすワード

ReadListのオプション

ファイルのテキストをワードの列として読み込む.文字をワードセパレータとして指定.
In[12]:=
Click for copyable input
Out[12]=

Wolfram言語はデータファイルをレコードの列からなるとみなす.デフォルトで,各行はそれぞれ独立したレコードとみなされる.一般に,レコードを区切るレコードセパレータをオプションRecordSeparatorsで指定することができる.レコードセパレータは必ずワードも区切ることに注意する.ワードセパレータと同様,複数のレコードセパレータが続いても,1つが有効で後は無視される.レコードセパレータがレコードの一部となることはない.

デフォルトで,ファイルの各行は独立のレコードとなる.
In[13]:=
Click for copyable input
Out[13]//InputForm=
ピリオドで終る3つの文が書かれたファイル.
ピリオドの改行をレコードセパレータとしてこのファイルを読み込む.
In[15]:=
Click for copyable input
Out[15]=
それぞれの文の中のワードをサブリストとする.
In[16]:=
Click for copyable input
Out[16]=
ReadList["file",Record,RecordSeparators->{}]
ファイル全体を1つの文字列として読み込む
ReadList["file",Record,RecordSeparators->{{"lsep1",},{"rsep1",}}]
で囲まれる部分をサブリストとして読み込む

オプションRecordSeparatorsの設定値

テキストが書かれたファイル.
そのファイルの中のすべてのテキストを読み込み,結果を1つの文字列として返す.
In[18]:=
Click for copyable input
Out[18]//InputForm=
今度はセパレータに囲まれた部分を独立の式としてリストにする.
In[19]:=
Click for copyable input
Out[19]=
適当なセパレータを選んで,ファイルの特定の部分を選択的に読み込むことができる.
In[20]:=
Click for copyable input
Out[20]=

Wolfram言語では普通複数個のセパレータがあっても,それらは1つのセパレータとみなされる.しかし,場合によっては複数個のセパレータがあるとき,セパレータの間には「なし」のレコードまたはワードがあるとみなしたいことがある.これはNullRecords->TrueまたはNullWords->Trueとすることによって実現される.

コロンで区切られたワードを含むファイル.
複数の連続するコロンは単一のコロンと同一視される.
In[22]:=
Click for copyable input
Out[22]=
今度は連続するコロンの間は「なし」のワードとみなされる.
In[23]:=
Click for copyable input
Out[23]=

ほとんどの場合,ワードはそれ自体ワードとみなされないセパレータによって区切られる.しかし,場合によっては,特殊なそれ自体ワードである「トークンワード」によってワードを区切ることが便利なこともある.トークンワードはリストとしてオプションTokenWordsに設定すればよい.

テキストが書かれたファイル.
指定したトークンワードを区切りとしてテキストをワード単位で読み込む.
In[25]:=
Click for copyable input
Out[25]=

ReadListを使ってファイルからWolfram言語式を読むことができる.一般に,それぞれの式はたとえ複数行に渡るものでも,最後は改行で終らなければならない.

Wolfram言語入力式として使うことができるテキストの書かれたファイル.
の中のテキストをWolfram言語の式として読み込む.
In[27]:=
Click for copyable input
Out[27]=
読み込まれた式が評価されるのを抑制する.
In[28]:=
Click for copyable input
Out[28]=

ReadListはそれが読み込むWolfram言語式に任意のオブジェクトを挿入することができる.ReadListの第2引数は,読み込むオブジェクトの型を指定するNumberWord等の記号を含む任意の式からなる.したがって,例えば,ReadList["file",{Number,Number}]は,読み込んだ数を2つずつサブリストにする.同様に,ReadList["file",Hold[Expression]]は,読み込んだ式をHoldの中に入れる.

ReadListが,所定のオブジェクトの1組を読み終る前にファイルの最後に達したときは,読み込まれていないオブジェクトの代りに特別な記号EndOfFileを挿入する.

数の書かれたファイル.
ファイルの最後にきても必要な数が足りないとき,その位置に記号EndOfFileが現れる.
In[30]:=
Click for copyable input
Out[30]=
ReadList["!command",type]コマンドを実行し,その出力を読み込む
ReadList[stream,type]入力ストリームを読む

コマンドとストリームからの読込み

Unixコマンドを実行し,その出力を文字列として読み込む.
In[31]:=
Click for copyable input
Out[31]=
OpenRead["file"]ファイルからの入力ストリームを開く
OpenRead["!command"]パイプからの入力ストリームを開く
Read[stream,type]ストリームから指定の型のオブジェクトを読み込む
Skip[stream,type]入力ストリームの指定の型のオブジェクトを読み飛ばす
Skip[stream,type,n]入力ストリームの指定の型のn 個のオブジェクトを読み飛ばす
Close[stream]入力ストリームを閉じる

入力ストリームからの読込みに関する関数

ReadListは所定のファイルまたは入力ストリームのすべてのデータを一度に読み込む.しかし,ときには,例えば次のデータが何かを予測しながら,1つずつ順にデータを取り込みたいことがある.

ファイルから個々のデータを読むとき,Wolfram言語はファイルにおけるカレントポイント(現在地)を覚えている.OpenReadを実行すると,Wolfram言語はファイルからの入力ストリームを開き,カレントポイントをファイルの先頭に置くReadでファイルからオブジェクトを読み込むたびに,Wolfram言語はカレントポイントを読み込んだオブジェクトの直後へ移動する.Skipを使えば,オブジェクトを読み込まずに複数のオブジェクトを飛び越してカレントポイントを移動することができる.

数の書かれたファイル.
ファイルからの入力ストリームを開く.
In[33]:=
Click for copyable input
Out[33]=
ファイルから初めの数を読み込む.
In[34]:=
Click for copyable input
Out[34]=
次の2つの数をペアにして読み込む.
In[35]:=
Click for copyable input
Out[35]=
次の数を読まずに飛び越す.
In[36]:=
Click for copyable input
残りの数を読み込む.
In[37]:=
Click for copyable input
Out[37]=
入力ストリームを閉じる.
In[38]:=
Click for copyable input
Out[38]=

ReadListのときと同様,ReadSkipにおいてもオプションWordSeparatorsRecordSeparatorsを使うことができる.

ファイルの最後より先を読み込もうとすると,Readは記号EndOfFileを返すことに注意する.