文字列の検索と読込み

ReadFind等の関数は,外部ファイルから読み込むテキストやデータを処理するのに使われることが多い.しかし,場合によっては,これらの関数をWolfram言語の中で文字列を処理するのに使うと便利なこともある.これには関数StringToStreamがあり,入力ストリームを開くが,外部ファイルからでなく,Wolfram言語の文字列から文字を取り出す.

StringToStream["string"]文字列から読み出すために入力ストリームを開く
Close[stream]入力ストリームを閉じる

文字列を入力ストリームとして処理する

文字列から読み込むために入力ストリームを開く.
In[1]:=
Click for copyable input
Out[1]=
その文字列から初めの「ワード」を読む.
In[2]:=
Click for copyable input
Out[2]=
文字列から残りのワードを読み込む.
In[3]:=
Click for copyable input
Out[3]=
入力ストリームを閉じる.
In[4]:=
Click for copyable input
Out[4]=

文字列からの入力ストリームはファイルへのストリームと同様に機能する.任意の時点で,ストリームにおいてカレントポイントが設定され,それはRead等の関数が実行されると移動する.カレントポイントの位置は,関数StreamPosition[stream]によって文字列の先頭からの文字数を表す整数で示される.SetStreamPosition[stream,n]を使って明示的にカレントポイントの位置を設定することができる.

文字列から読み込むために入力ストリームを開く.
In[5]:=
Click for copyable input
Out[5]=
カレントポイントは初め文字列の先頭から0個の文字の位置にある.
In[6]:=
Click for copyable input
Out[6]=
ストリームから数を読む.
In[7]:=
Click for copyable input
Out[7]=
カレントポイントは文字列の先頭から3個目の文字の位置に移動した.
In[8]:=
Click for copyable input
Out[8]=
カレントポイントを文字列の先頭から1個目の文字の位置に移す.
In[9]:=
Click for copyable input
Out[9]=
ここで文字列から数を読み込めば,のうちの部分が読まれる.
In[10]:=
Click for copyable input
Out[10]=
カレントポイントを最後尾に移す.
In[11]:=
Click for copyable input
Out[11]=
ストリームから何かを読み込もうとすると,EndOfFileを得る.
In[12]:=
Click for copyable input
Out[12]=
ストリームを閉じる.
In[13]:=
Click for copyable input
Out[13]=

特に大量のテキストデータを処理するときは,Wolfram言語に長い文字列を読み込ませることが普通で,この場合StringToStreamを使うとWolfram言語の中でこの文字列を処理することができる.StringToStreamを使って一度入力ストリームを開けば,文字列を読んだり検索したりするのに,ファイルの項で述べたどの関数でも使うことができる.

のすべての内容を文字列に変える.
In[14]:=
Click for copyable input
Out[14]=
その文字列に対して入力ストリームを開く.
In[15]:=
Click for copyable input
Out[15]=
文字列中のを含む行を探し出す.
In[16]:=
Click for copyable input
Out[16]=
カレントポイントを文字列の先頭に再設定する.
In[17]:=
Click for copyable input
Out[17]=
文字列の中に現れる最初のを探し出し,その直後にカレントポイントを移動する.
In[18]:=
Click for copyable input
Out[18]=
の直後にあるワードを読み込む.
In[19]:=
Click for copyable input
Out[19]=
入力ストリームを閉じる.
In[20]:=
Click for copyable input
Out[20]=