小编Mar*_*ich的帖子

在大型文本文件中查找和替换文本(Delphi XE5)

我试图找到并替换文本文件中的文本.我过去能够用以下方法做到这一点:

procedure SmallFileFindAndReplace(FileName, Find, ReplaceWith: string);
begin
  with TStringList.Create do
    begin
    LoadFromFile(FileName);
    Text := StringReplace(Text, Find, ReplaceWith, [rfReplaceAll, rfIgnoreCase]);
    SaveToFile(FileName);
    Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

但是,当文件相对较小时,上述工作正常; 当文件大小类似于170 Mb时,上面的代码将导致以下错误:EOutOfMemory,消息"Out of memory"在此输入图像描述

我已经尝试了以下成功,但运行需要很长时间:

procedure Tfrm_Main.button_MakeReplacementClick(Sender: TObject);
var
  fs : TFileStream;
  s  : AnsiString;
  //s  : string;
begin
  fs := TFileStream.Create(edit_SQLFile.Text, fmOpenread or fmShareDenyNone);
  try
    SetLength(S, fs.Size);
    fs.ReadBuffer(S[1], fs.Size);
  finally
    fs.Free;
  end;
  s := StringReplace(s, edit_Find.Text, edit_Replace.Text, [rfReplaceAll, rfIgnoreCase]);
  fs := TFileStream.Create(edit_SQLFile.Text, fmCreate);
  try
    fs.WriteBuffer(S[1], Length(S));
  finally
    fs.Free;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我是"Streams"的新手并使用缓冲区.

有一个更好的方法吗?

谢谢.

delphi delphi-xe

5
推荐指数
1
解决办法
5008
查看次数

标签 统计

delphi ×1

delphi-xe ×1