相关疑难解决方法(0)

如何有效地阅读Delphi中许多文件的最初几行

我的程序中有一个"查找文件"功能,可以找到我的程序读取的带有.ged后缀的文本文件.我在类似于资源管理器的窗口中显示找到的结果,如下所示:

在此输入图像描述

我使用标准的FindFirst/FindNext方法,这非常有效.上面显示的584个文件可在几秒钟内找到并显示.

我现在要做的是在显示屏上添加两列,显示每个文件中包含的"Source"和"Version".此信息通常位于每个文件的前10行内,如下所示:

1 SOUR FTM
2 VERS Family Tree Maker (20.0.0.368)
Run Code Online (Sandbox Code Playgroud)

现在我自己解析这个问题没有问题,这不是我要问的问题.

我需要帮助的只是如何最快速地从这些文件加载​​前10行,以便我可以解析它们.

我试图做一个StringList.LoadFromFile,但加载大文件需要花费太多时间,例如1 MB以上的文件.

由于我只需要前10行左右,我最好如何获得它们?

我正在使用Delphi 2009,我的输入文件可能是也可能不是Unicode,所以这需要适用于任何编码.


跟进:谢谢Antonio,

我最终做了这个工作正常:

var
  CurFileStream: TStream;
  Buffer: TBytes;
  Value: string;
  Encoding: TEncoding;

try
  CurFileStream := TFileStream.Create(folder + FileName, fmOpenRead);
  SetLength(Buffer, 256);
  CurFileStream.Read(Buffer[0], 256);
  TEncoding.GetBufferEncoding(Buffer, Encoding);
  Value := Encoding.GetString(Buffer);
  ...
  (parse through Value to get what I want)
  ...
finally
  CurFileStream.Free;
end;
Run Code Online (Sandbox Code Playgroud)

delphi file-io large-files

7
推荐指数
1
解决办法
3564
查看次数

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

我的程序中有一个FindFile例程,它将列出文件,但是如果填写了"Containing Text"字段,那么它应该只列出包含该文本的文件.

在此输入图像描述

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

  var
    FileContents: TStringlist;

  begin
    FileContents.LoadFromFile(Filepath);
    if Pos(TextToFind, FileContents.Text) = 0 then
      Found := false
    else 
      Found := true;
Run Code Online (Sandbox Code Playgroud)

上面的代码很简单,一般都可以.但它有两个问题:

  1. 对于非常大的文件(例如300 MB),它会失败

  2. 我觉得它可能会更快.这还不错,但为什么要等待10分钟搜索1000个文件,如果可能有一个简单的方法来加快它的速度?

我需要这个用于Delphi 2009并搜索可能是也可能不是Unicode的文本文件.它只需要用于文本文件.

那么如何加快搜索速度并使其适用于非常大的文件呢?


额外奖励:我还想要允许"忽略大小写"选项.提高效率是一件更艰难的事情.有任何想法吗?


解:

嗯,mghie指出我之前的问题如何在Delphi中有效地阅读许多文件的前几行,而且正如我所回答的那样,它是不同的,并没有提供解决方案.

但是他让我想到我以前做过这件事而且我曾经做过.我为大文件构建了一个块读取例程,将其分解为32 MB块.我用它来读取我的程序的输入文件,这可能是巨大的.该例程工作正常,速度快.所以第一步是对我正在浏览的这些文件做同样的事情.

所以现在问题是如何在这些块内有效搜索.那么我确实有一个关于该主题的上一个问题:Delphi中是否有一个高效的全字搜索功能?和RRUZ向我指出了SearchBuf例程.

这也解决了"奖金",因为SearchBuf有选项,包括全字搜索(该问题的答案)和MatchCase/noMatchCase(奖金的答案).

所以我开始跑步了.再次感谢SO社区.

delphi optimization search large-files

4
推荐指数
2
解决办法
8257
查看次数

标签 统计

delphi ×2

large-files ×2

file-io ×1

optimization ×1

search ×1