加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用Delphi快速搜索大型文件中是否存在字符串

发布时间:2020-12-15 10:07:42 所属栏目:大数据 来源:网络整理
导读:我的程序中有一个FindFile例程,它将列出文件,但是如果填写了“Containing Text”字段,那么它应该只列出包含该文本的文件. 如果输入“包含文本”字段,则我搜索为文本找到的每个文件.我目前的做法是: var FileContents: TStringlist; begin FileContents.Load
我的程序中有一个FindFile例程,它将列出文件,但是如果填写了“Containing Text”字段,那么它应该只列出包含该文本的文件.

如果输入“包含文本”字段,则我搜索为文本找到的每个文件.我目前的做法是:

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社区.

解决方法

这是与您之前的问题 How Can I Efficiently Read The First Few Lines of Many Files in Delphi相关的问题,并且适用相同的答案.如果您没有完全读取文件但是在块中,那么大文件不会造成问题.对于包含文本的文件,也有很大的加速,因为你应该在第一场比赛时取消搜索.目前,即使找到的文本位于前几行,您也会读取整个文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读