如何快速查找含有“指定字符”的文件(200分)

  • 主题发起人 主题发起人 lhq789
  • 开始时间 开始时间
L

lhq789

Unregistered / Unconfirmed
GUEST, unregistred user!
最近,我做了一个功能与类似WINDOWS下的“查找文件”类似的程序,可以根据每个文件中<br>是否有“指定的字符串”来确定文件,我是用FindFirst,FindNext查找文件,<br>用TFileStream,TStringStream打开文件,最后用Pos()查找字符串的,但如果一个文件是<br>几MB甚至十几MB的话,打开的时间则非常的长,而如果我用WINDOWS下的“查找文件”功能<br>搜索的话,它却能用极短的时间确定含有“指定的字符串”的文件,请大家说说WINDOWS是<br>怎样查找的,难道它不需要打开文件吗?200分奉上!!!
 
请大家提些建议
 
&nbsp; 去年全国大学生数学模型竞赛有一个题目的思想就是大文件中查找字符串。<br>&nbsp; &nbsp;能用极短的时间确定,是一个很困难的事。
 
windows只是根据文件名决定取舍,当然要比你快了。
 
去年全国大学生数学模型竞赛有一个题目的思想就是大文件中查找字符串<br>有标准答案吗?
 
资源管理器速度很快?对于大文件的速度也不快呀。<br>对于这种情况,应当创建一个大的内存缓冲区,然后使用快速搜索进行检索。<br>大学生竞赛的题目,我个人认为考的是索引和检索技术,和上面的情况并不相同。<br>如果文件都是给定的,当然可以根据内容制作索引,这和数据库的原理有些相似。
 
分段打开文件,每次读到内存的数据块不要太大,这样不需要太多的内存,速度快一些。<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; wj:File;<br>&nbsp; fb:String[20];<br>&nbsp; br:integer;<br>begin<br>&nbsp; assignfile(wj,'文件名');<br>&nbsp; reset(wj,1);<br>&nbsp; while not eof(wj) do begin<br>&nbsp; &nbsp; blockread(wj,fb,sizeof(fb),br);<br>&nbsp; &nbsp; if pos('指定字符',fb)&gt;0 then Button1.Caption:='找到拉';<br>&nbsp; end;<br>&nbsp; Closefile(wj);<br>end;<br><br>大概这意识,再改一改吧。<br>
 
别逗了,内存缓冲越大速度就越快。<br>而且,你考虑到跨记录边界的匹配了吗?如果内存缓冲足够大,跨记录边界匹配带来的<br>开销就可以忽略,但是按照你的设计,恐怕要使用两倍的搜索时间处理边界问题。
 
我在赛羊1G、256M内存的机器上,用Q_string函数系列中的pos函数,查10几M的文本文件<br>玩儿似的,但要copy一段文字进RichEdit则要花上几秒钟。
 
左右看看,大皮不在 :-)<br>朋友,用映射文件打开大文件就快.然后配以更快的字符串查找函数,就可以了.<br>可以想像,应该不会慢的.
 
更快的字符串查找函数是什么?<br>关注
 
听高手的意见
 
》去年全国大学生数学模型竞赛有一个题目的思想就是大文件中查找字符串<br>》有标准答案吗?<br>这个竞赛一般没有标准答案 &nbsp; &nbsp;
 
多线程,查找的关键代码用汇编代码嵌入,不要用pos
 
不会,听课
 
后退
顶部