我正在尝试在大文本文件中搜索子字符串。
我找到了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;
任何改进第一个功能的建议/指导?