搜索文件

FindList["file","text"]给出文件中含有指定文本的所有行
FindList["file","text",n]给出文件中含有指定文本的前 n
FindList["file",{"text1","text2",...}] 给出含有任一个 的行

寻找含有指定文本的行.

这是一个包含一些文本的文件.
返回文件中所有含有文本 的行.
In[2]:=
Click for copyable input
Out[2]=
文件中没有含有文本 .
In[3]:=
Click for copyable input
Out[3]=

在默认状态下,FindList 扫描文件的相继行,返回包含指定文本的这些行. 一般可以令 FindList 扫描相继的记录 ,返回包含指定文本的这些记录. 在 ReadList 中,选项 RecordSeparators 告诉 Mathematica 将哪些字符串作为记录分隔符. 注意,在 RecordSeparators 设置中给出字符串对列表可以指定不同的左、右分隔符. 这样就可以使 FindList 搜索在指定的分隔符对中间的文本.

找出以. 作为结束符的所有含有 And 的"语句".
In[4]:=
Click for copyable input
Out[4]=
选项名
默认值
RecordSeparators{"\n"}记录分隔符
AnchoredSearchFalse是否要求搜索的文本位于记录开头
WordSeparators{" ","\t"}词分隔符
WordSearchFalse是否要求搜索的文本作为一个词
IgnoreCaseFalse是否将大小写同等看待

FindList 选项.

仅找出文件中一行开头出现的 .
In[5]:=
Click for copyable input
Out[5]=

一般地,FindList 查找出现在一个记录中任何位置的文本. 设置 WordSearch->TrueFindList 去找出在记录中是的文本. 选项 WordSeparators 指定词分隔符的列表.

文本 确实出现在文本中,但它不是一个词,所以 FindList 未找到.
In[6]:=
Click for copyable input
Out[6]=
FindList[{"file1","file2",...},"text"] 搜索在文件 的任一个中出现的文本

在多个文件中搜索.

这里在文件 的两个拷贝中搜索 .
In[7]:=
Click for copyable input
Out[7]=

通常对由 FileNames 等函数产生的文件列表调用 FindList 是很有用的.

FindList["!command",...]运行一个外部命令,找出其输出中的文本

在一个外部程序输出中寻找文本.

运行外部Unix命令 .
In[8]:=
Click for copyable input
Out[8]=
找出其输出中的时间.
In[9]:=
Click for copyable input
Out[9]=
OpenRead["file"]打开一个用以读的文件
OpenRead["!command"]打开一个用以读的管道
Find[stream,text]找出下一个出现的 text
Close[stream]关闭输入流

找出相继出现的文本.

FindList 寻找在一个文件中出现的指定文本. 有时需要递增地寻找相继出现的文本. 这可以用 Find 来实现.

使用 Find 首先要用 OpenRead 去明确打开一个输入流. 然后每次对这个流调用 Find 时,它就搜寻给定的文本,并将文件中的当前点移到所找出的记录之后. 这样就可以多次调用 Find 去找出相继的文本.

对文件 打开一个输入流.
In[10]:=
Click for copyable input
Out[10]=
找到第一个包含 And 的行.
In[11]:=
Click for copyable input
Out[11]=
再次调用 Find 给出下一个包含 And 的行.
In[12]:=
Click for copyable input
Out[12]=
关闭输入流.
In[13]:=
Click for copyable input
Out[13]=

有一个输入流时,可混合调用 FindSkipRead. 但调用了 FindListReadList 后,Mathematica 就立即读到文件末尾.

打开一个输入流.
In[14]:=
Click for copyable input
Out[14]=
找出第一个包含 的行. 将文件中当前点移到下一行开始.
In[15]:=
Click for copyable input
Out[15]=
Read 就可以读出位于这一行开始的词.
In[16]:=
Click for copyable input
Out[16]=
跳过随后的3个词.
In[17]:=
Click for copyable input
Mathematica 在其余的文本中寻找 ,并将整个记录作为输出.
In[18]:=
Click for copyable input
Out[18]=
关闭输入流.
In[19]:=
Click for copyable input
Out[19]=
StreamPosition[stream]找出打开流中的当前点的位置
SetStreamPosition[stream,n]设置当前点位置
SetStreamPosition[stream,0]将当前点设在流的开始位置
SetStreamPosition[stream,Infinity]将当前点设在流的末尾

寻找和设定流中的当前位置.

函数如 ReadSkipFind 等在一个流上按一个完整序列的形式运行. 这些函数中的某一个被调用一次时,该流中的当前点就向前移动.

有时,需要知道一个流中当前点的位置,并能重新设置它. 在大部分计算机系统中,StreamPosition 返回当前点的位置,它给出的是一个从流的开始算起的字节数.

打开一个流.
In[20]:=
Click for copyable input
Out[20]=
当第一次打开一个文件时,当前点在开头,StreamPosition 返回值为 .
In[21]:=
Click for copyable input
Out[21]=
读文件的第一行.
In[22]:=
Click for copyable input
Out[22]=
现在当前点已向前移.
In[23]:=
Click for copyable input
Out[23]=
这里将流的位置向后移.
In[24]:=
Click for copyable input
Out[24]=
现在 Read 返回的是第一行的其余部分.
In[25]:=
Click for copyable input
Out[25]=
关闭这个流.
In[26]:=
Click for copyable input
Out[26]=
New to Mathematica? Find your learning path »
Have a question? Ask support »