在大文本文件中搜索字符串

时间:2017-05-24 02:09:26

标签: delphi

我正在尝试在大文本文件中搜索子字符串。

我找到了David Heffernan buffered disk access unit.

所以我这样使用它:

function _FindStrInFile(const AFileName, SubStr: string): string;
var
  Stream   : TReadOnlyCachedFileStream;
  SL       : TStringList;
  I        : Integer;
begin
  Result   := '';
  Stream   := TReadOnlyCachedFileStream.Create(AFileName);
  try
    Stream.Position := 0;
    SL := TStringList.Create;
    try
      SL.LoadFromStream(AFileName);
      for I := 0 to SL.Count-1 do begin
        if Pos(SubStr, SL[I]) > 0 then begin
          Result := SL[I];
          Break;
        end;
      end;
    finally
      SL.Free;
    end;
  finally
    Stream.Free;
  end;
end;

我不确定我是否正确使用它(缓冲磁盘访问),或者当我将流加载到TStringList并循环通过它时使其无效。

因为我计算了上述方法和以下方法所消耗的时间: 我发现以下测试文件的速度更快(以毫秒为单位)。

function _FindStrInFile(const AFileName, SubStr: string): string;
var
  SL       : TStringList;
  I        : Integer;
begin
  Result   := '';
  SL := TStringList.Create;
  try
    SL.LoadFromFile(AFileName);
    for I := 0 to SL.Count-1 do begin
      if Pos(SubStr, SL[I]) > 0 then begin
        Result := SL[I];
        Break;
      end;
    end;
  finally
    SL.Free;
  end;
end; 

任何改进第一个功能的建议/指导?

0 个答案:

没有答案