如何提高读写文本文件的效率?

wwjlucky 2003-09-16 12:21:04
procedure TTfrmMain.SBtnGOClick(Sender: TObject);
var
F: TextFile;
N: TextFile;
S: String;
T: String;
begin
S:='';T:='';
if OpenDialog1.Execute then
begin
AssignFile(N,'c:\tmp.txt');
if FileExists('c:\tmp.txt') then
Reset(N)
else
Rewrite(N);
AssignFile(F,OpenDialog1.FileName);
Reset(F);
while not eof(F) do
begin
Readln(F,S);
if (S<>T) then
begin
Append(N);
Writeln(N,S);
T:=S;
end
else
begin
T:=S;
end;
end;
CloseFile(F);
CloseFile(N);
ShowMessage('文档已处理完毕,请在c:\目录下察看');
end;
end;

以上是源代码,我是要将原文件中的不重复的行写到另外一个文件中。但是发现以上方法,处理上万行的文本文件是速度特别慢!不知道有什么提高效率的方法!
...全文
30 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwjlucky 2003-09-18
  • 打赏
  • 举报
回复
我的文本文件中,重复行是挨着的!
lxpbuaa 2003-09-16
  • 打赏
  • 举报
回复
试试这样:

uses IniFiles;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
StrList, RStrList: THashedStringList;
S, T: String;
begin
StrList := THashedStringList.Create;
RStrList := THashedStringList.Create;
StrList.LoadFromFile('c:\tmp.txt');
RStrList.BeginUpdate;

StrList.Sort;
S := StrList[0];
for I := 1 to StrList.Count do
begin
T := StrList[I];
if S <> T then
begin
S := T;
RStrList.Add(S);
end;
end;

RStrList.EndUpdate;
RStrList.SaveToFile('OpenDialog1.FileName');
end;


另,如果重复的行不是挨着的,你的代码并不能剔除它们。

—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————

5,392

社区成员

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

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