ファイルの検索
| FindList["file","text"] | ファイルにおいて指定のテキストを含むすべての行のリスト |
| FindList["file","text",n] | ファイルにおいて指定のテキストを含むn 個の行のリスト |
| FindList["file",{"text1","text2",...}] | ファイルにおいてテキスト texti のいずれかを含む行のリスト |
特定のテキストを含む行の検索
| Out[2]= |  |
|
テキスト fourthはファイルのどこにも見出されない.
| Out[3]= |  |
|
デフォルトで,
FindListはファイルの各行を順にスキャンし,指定したテキストを含む行を返す.しかし,一般に,
FindListがレコードを順にスキャンし,指定のテキストを含むそれぞれのレコードを返すようにすることもできる.
ReadListと同様に,オプション
RecordSeparatorsによってレコードセパレータを指定することができる.
RecordSeparatorsにペアのリストを与えることによって,左と右のセパレータを別々に指定することもできる.この場合,
FindListは左右のセパレータに囲まれたテキストのみを検索するようにできる.
ピリオドで区切られた「文」で, Andを含むものを探し出す.
| Out[4]= |  |
|
FindListのオプション
ファイルの各行の行頭に現れる Hereのみを検索する.
| Out[5]= |  |
|
一般に,
FindListはレコードの任意の位置に現れるテキストを探し出す.しかし,オプション
WordSearch->Trueを設定すると,
FindListは指定のテキストがレコードの中の独立したワードとして現れるものだけを検索する.オプション
WordSeparatorsはワードのセパレータを指定する.
ファイルにテキスト thは現れるが,独立したワードではない.その結果, FindListは何も探し出さない.
| Out[6]= |  |
|
| FindList[{"file1","file2",...},"text"] |
| テキストをfilei のいずれかにあれば探し出す |
複数のファイルの検索
テキスト thirdをファイル textfileを対象に2回検索する.
| Out[7]= |  |
|
FileNames等の関数が返したファイル名のリストに
FindListを適用すると便利なことがある.
| FindList["!command",...] | 外部コマンドを実行し,その出力に含まれるテキストを探し出す |
外部プログラムの出力中のテキストの検索
外部のUnixコマンド dateをテキスト型のインターフェースで走らせる.
| Out[8]= |  |
|
| Out[9]= |  |
|
テキストの検索手順
FindListは,指定するテキストを特定のファイルに対して一括検索する.しかし,ときには,テキストを1つずつ順に探し出したいこともある.これは
Findを使って実現される.
Findを使うには,まず
OpenReadによって明示的に入力ストリームを開かなければならない.その後は,
Findをこのストリームに対して実行するたびに指定のテキストが探され,カレントポイントをテキストが見出されたレコードの直後に移す.その結果,
Findを数回繰り返して順にテキストを検索することができる.
| Out[10]= |  |
|
| Out[11]= |  |
|
| Out[12]= |  |
|
| Out[13]= |  |
|
一度入力ストリームを開いたら,
Find,
Skip,
Readを交互に使うことができる.
FindListまたは
ReadListを実行すると,
Mathematica は即座に入力ストリームの最後まで読み込む.
| Out[14]= |  |
|
secondを含む最初の行を見出し,カレントポイントを次の行の先頭に移す.
| Out[15]= |  |
|
| Out[16]= |  |
|
Mathematica は isを残りのテキスト中に見出し,それを含むレコードを出力として返す.
| Out[18]= |  |
|
| Out[19]= |  |
|
ストリームにおけるカレントポイントの設定
Read,
Skip,
Find等の関数は,ストリームに先頭から順に作用する.いずれかの関数が実行されるたびにストリームにおけるカレントポイントが移動される.
ストリームにおけるカレントポイントがどこにあるかを知りたいこと,またこれを再設定したいことがある.ほとんどのコンピュータシステムでは,
StreamPositionはカレントポイントの位置を,ストリームの先頭からの位置に対応するバイト数を表す整数で返す.
| Out[20]= |  |
|
| Out[21]= |  |
|
| Out[22]= |  |
|
| Out[23]= |  |
|
| Out[24]= |  |
|
| Out[25]= |  |
|
| Out[26]= |  |
|