如果输入“包含文本”字段,则我搜索为文本找到的每个文件.我目前的做法是:
var FileContents: TStringlist; begin FileContents.LoadFromFile(Filepath); if Pos(TextToFind,FileContents.Text) = 0 then Found := false else Found := true;
上面的代码很简单,一般都可以.但它有两个问题:
>对于非常大的文件(例如300 MB)失败
>我觉得它可能会更快.这还不错,但为什么要等待10分钟搜索1000个文件,如果可能有一种简单的方法来加快它的速度呢?
我需要这个用于Delphi 2009并搜索可能是也可能不是Unicode的文本文件.它只需要用于文本文件.
额外奖励:我还想要允许“忽略大小写”选项.提高效率是一件更艰难的事情.有任何想法吗?
解:
嗯,mghie指出了我之前的问题How Can I Efficiently Read The First Few Lines of Many Files in Delphi,正如我回答的那样,它是不同的,并没有提供解决方案.
但是他让我想到我以前做过这件事而且我曾经做过.我为大文件构建了一个块读取例程,将其分解为32 MB块.我用它来读取我的程序的输入文件,这可能是巨大的.该例程工作正常,速度快.所以第一步是对我正在浏览的这些文件做同样的事情.
所以现在问题是如何在这些块内有效搜索.好吧,我确实有一个关于该主题的上一个问题:Is There An Efficient Whole Word Search Function in Delphi?和RRUZ向我指出了SearchBuf例程.
这也解决了“奖金”,因为SearchBuf有选项,包括全字搜索(该问题的答案)和MatchCase / noMatchCase(奖金的答案).
所以我开始跑步了.再次感谢SO社区.
解决方法
原文地址:https://www.jb51.cc/delphi/103065.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。