想做一个文本文件修改小程序. ( 积分: 100 )

  • 主题发起人 主题发起人 happytimes_dsq
  • 开始时间 开始时间
H

happytimes_dsq

Unregistered / Unconfirmed
GUEST, unregistred user!
单位用CCProxy代理上网,所以在服务器上有个日志,记录了LAN里所有客户端上网的记录.每一个动作都生成条信息写到一个文本文件里(每个动作都生成个相同格式的信息然后增加一行.格式都是:日期+时间+IP+机器名+上网地址).我想应该可以做个修改文本文件的后台程序,把某个IP的信息全部删除掉(也就是相当于过滤某个IP的信息).因为动作在不断产生所以源文本是适时的修改,所以作出程序也应该是适时的修改吧(至少得几分钟修改一次吧)..
各位给小弟点帮助,给个代码,小弟学习下!
 
我写了下,速度好慢.(都好象死了).希望有能快些的..小弟水平不够
var
Txt:TStringList;
TxtFileName,Line:String;
TxtLines,i:integer;
begin
Txt:=TStringList.Create;
TxtFileName:='D:/log20070327.txt';
Txt.LoadFromFile(TxtFileName);
TxtLines:=Txt.Count;
for i:=1 to TxtLines do
begin
Line:=copy(Txt.Strings,23,13);//取得文本每行的IP
if Line='192.168.0.237' then
Txt.Delete(i);
Txt.SaveToFile(TxtFileName);
end;
showmessage('ok');
 
给个建议参考下
慢的原因: 频繁访问文件。
办法: 用文件内存映射的方法
CreateFileMapping ,MapViewOfFile,...等等,详细的自己去查下
 
写在线程里面不就行了,让自己运行!
 
小弟不才,各位大哥能帮忙给点代码吗?
 
修改如下再试试
var
Txt:TStringList;
TxtFileName,Line:String;
TxtLines,i:integer;
begin
Txt:=TStringList.Create;
TxtFileName:='D:/log20070327.txt';
Txt.LoadFromFile(TxtFileName);
TxtLines:=Txt.Count;
for i:= TxtLines downto 1 do
begin
if Pos('192.168.0.237', Txt.Strings) > 0 then
Txt.Delete(i);
end;
Txt.SaveToFile(TxtFileName);
showmessage('ok');
end;
 
不行呀! 执行的时候有溢出,是不是有别的好办法呢
 
不知道文件多大,小的话几M以内,就拷贝到内存去处理;大的话 上G,就转到数据库里面,处理后,再转回来。
建议而已。
 
如果是要求实时,那么就很麻烦,我说的都不行。

不知道权限有多高,能不能监控那个LOG文件,读一行删一行,读出来的写到数据库里面,什么时候要删节,就在数据库里面改,需要看,就重新生成来看。
 
你可以新建个TStrings,把你不删除的倒过去再覆盖!应该快点
 
多人接受答案了。
 
后退
顶部