Wolfram ResearchProductsPurchasingServices & ResourcesAbout UsOur Sites
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.

Documentation / Mathematica / Mathematicaブック / Mathematicaの仕組み / ファイルとストリーム /

2.12.9 ファイルの検索

特定のテキストを含む行の検索

テキストの書かれたファイル.

In[1]:= !!textfile

"Here is the first line of text.

And the second.

And the third. Here is the end."

テキスト isを含むすべての行をリストとして返す.

In[2]:= FindList["textfile", "is"]

Out[2]=

テキスト fourthはファイルのどこにも見出されない.

In[3]:= FindList["textfile", "fourth"]

Out[3]=

デフォルトで,FindListはファイルの各行を順にスキャンし,指定したテキストを含む行を返す.しかし,一般に,FindListがレコードを順にスキャンし,指定のテキストを含むそれぞれのレコードを返すようにすることもできる.ReadListと同様に,オプション RecordSeparatorsによってレコードセパレータを指定することができる.RecordSeparatorsにペアのリストを与えることによって,左と右のセパレータを別々に指定することもできる.この場合,FindListは左右のセパレータに囲まれたテキストのみを検索するようにできる.

ピリオドで区切られた「文」で, Andを含むものを探し出す.

In[4]:= FindList["textfile", "And", RecordSeparators -> {"."}]

Out[4]=

FindListのオプション

ファイルの各行の行頭に現れる Hereのみを検索する.

In[5]:= FindList["textfile", "Here", AnchoredSearch -> True]

Out[5]=

一般に,FindListはレコードの任意の位置に現れるテキストを探し出す.しかし,オプションWordSearch -> Trueを設定すると,FindListは指定のテキストがレコードの中の独立したワードとして現れるものだけを検索する.オプション WordSeparatorsはワードのセパレータを指定する.

ファイルにテキスト thは現れるが,独立したワードではない.その結果,FindListは何も探し出さない.

In[6]:= FindList["textfile", "th", WordSearch -> True]

Out[6]=

複数のファイルの検索

テキスト thirdをファイル textfileを対象に 2回検索する.

In[7]:= FindList[{"textfile", "textfile"}, "third"]

Out[7]=

FileNames等の関数が返したファイル名のリストに FindListを適用すると便利なことがある.

外部プログラムの出力中のテキストの検索

外部の Unixコマンド dateを走らせる.

In[8]:= !date

Out[8]=

dateの出力の時刻のフィールドを探し 出す.

In[9]:= FindList["!date", ":", RecordSeparators -> {" "}]

Out[9]=

テキストの検索手順

FindListは,指定するテキストを特定のファイルに対して一括検索する.しかし,時には,テキストを1つずつ順に探し出したいこともある.これは Findを使って実現される.

Findを使うには,まず OpenReadによって明示的に入力ストリームを開かなければならない.その後は,Findをこのストリームに対して実行するたびに指定のテキストが探され,カレントポイントをテキストが見出されたレコードの直後に移す.その結果,Findを数回繰り返して順にテキストを検索することができる.

textfileからの入力ストリームを開く.

In[10]:= stext = OpenRead["textfile"]

Out[10]=

Andを含む初めの行を見出す.

In[11]:= Find[stext, "And"]

Out[11]=

再び Findを実行すると,Andを含む次の行が見出される.

In[12]:= Find[stext, "And"]

Out[12]=

入力ストリームを閉じる.

In[13]:= Close[stext]

Out[13]=

一度入力ストリームを開いたら,Find Skip Readを交互に使うことができる.FindListまたは ReadListを実行すると,Mathematicaは即座に入力ストリームの最後まで読み込む.

入力ストリームを開く.

In[14]:= stext = OpenRead["textfile"]

Out[14]=

secondを含む最初の行を見出し,カレントポイントを次の行の先頭に移す.

In[15]:= Find[stext, "second"]

Out[15]=

Readはその行の初めのワードを読み込む.

In[16]:= Read[stext, Word]

Out[16]=

次の 3ワードを飛び越す.

In[17]:= Skip[stext, Word, 3]

Mathematica isを残りのテキスト中に見出し,それを含むレコードを出力として返す.

In[18]:= Find[stext, "is"]

Out[18]=

入力ストリームを閉じる.

In[19]:= Close[stext]

Out[19]=

ストリームにおけるカレントポイントの設定

ReadSkipFind等の関数は,ストリームに先頭から順に作用する.いずれかの関数が実行されるたびにストリームにおけるカレントポイントが移動される.

ストリームにおけるカレントポイントがどこにあるかを知りたいこと,またこれを再設定したいことがある.ほとんどのコンピュータシステムでは,StreamPositionはカレントポイントの位置を,ストリームの先頭からの位置に対応するバイト数を表す整数で返す.

ストリームを開く.

In[20]:= stext = OpenRead["textfile"]

Out[20]=

初めにファイルが開かれたとき,カレントポイントは先頭にあり,StreamPosition 0を返す.

In[21]:= StreamPosition[stext]

Out[21]=

ファイルの最初の行を読み込む.

In[22]:= Read[stext, Record]

Out[22]=

カレントポイントは移動している.

In[23]:= StreamPosition[stext]

Out[23]=

カレントポイントを少し後退させる.

In[24]:= SetStreamPosition[stext, 5]

Out[24]=

Readは初めの行の残りの部分を読み込む.

In[25]:= Read[stext, Record]

Out[25]=

ストリームを閉じる.

In[26]:= Close[stext]

Out[26]=



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information


 © 2008 Wolfram Research, Inc.  Terms of Use  Privacy Policy |
Sign up for our newsletter: