如何读超大文本文件?

Qcj 2000-04-22 07:08:00
有一特大文本文件,几M之多。如何读出并处理,例如将其中的双引号改单引号?
...全文
318 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiyang 2000-04-28
  • 打赏
  • 举报
回复
to liuly:是啊,几M算不了什么!!!只不过内存要非常大罢了!!!用此方法时,请耐心等待,文件打开时间是需要很长的!
还是分段读取处理;或者用内存映射文件,不过我没用过,不知道速度怎样。
LittleStar 2000-04-24
  • 打赏
  • 举报
回复
用“内存映射文件”。
LittleStar 2000-04-24
  • 打赏
  • 举报
回复
用“内存映象文件”。
liuly 2000-04-24
  • 打赏
  • 举报
回复
速度要求不很高的话,一个RichEdit就可以搞定啦!
RichEdit1.MaxLength := High(integer) - 1024;
if OpenDialog1.Execute then
RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
理论上讲,RichEdit可以处理2G大小的数据,几M算不了什么

jll 2000-04-23
  • 打赏
  • 举报
回复
用缓冲技术,申请一个Buffer(例如4kb),每次处理Buffer中的数据,处理完后再读入后继的文件内容进行处理……
RIAEasy 2000-04-22
  • 打赏
  • 举报
回复
每次读入一部分,处理;再读入,处理;直到读完。

function TForm1.LoadLargeFile(FileName: string): Boolean;
const B=$8FFF; //每次读入的长度;
var Stream: TStream; I: Integer; S: string;
begin
Stream:=TFileStream.Create(FileName, fmOpenRead);
try
if Stream.Size<=FCount then begin Exit; end;
//FCount是私有量,保存已经读入的长度;
Stream.Position:=FCount;
I:=Stream.Size-FCount;
if I>B then I:=B;
SetLength(S, I);
Stream.ReadBuffer(S[1], I); //此时,已经读入I字节;
Inc(FCount, I);
Memo1.Lines.Clear;
Memo1.Lines.Add(S);
finally
Stream.Free;
end;
end;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧