如何快速而有效地操作文本文件?高手请进!(100分)

  • 主题发起人 主题发起人 qby
  • 开始时间 开始时间
Q

qby

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一文本文件data.txt,内容如下:(大约有30多万行)
wave01, Ne, 0.23596, Yes
wave02, Pe, 0.01136, Yes
wave02, Pe, 0.50161, No
wave03, Ne, 0.52138, No
wave01, Pe, 0.30793, Yes
wave02, Pe, 0.76416, No
......
现在想从第一行开始,搜索此文件:如果碰到某行的第二项内容为‘Ne’时,则把
‘Ne’改为‘Pe’,并将此行的第三项内容置为‘0.00000’,然后继续搜索,直到文
件结束。谁能给出一个快速而有效的程序来?我出100元
 
程序的话就只能用笨办法了,循环或文件流,

方法的话就简单一点,导入到数据库为一个表,一个UpDate语句搞定。
 
procedure TForm1.Button1Click(Sender: TObject);
var
MS : TStrings;
i:word;
begin
MS:=TStringList.Create;
MS.LoadFromFile('data.txt');
for i:=0 to MS.Count-1 do
if pos('Ne',MS)>0 then
MS:=copy(MS,1,7)+' Pe'+', 0.00000, '+copy(MS,22,length(MS)-21);
MS.SaveToFile('data1.txt');
end;
 
我是希望只在data.txt上进行修改,而不保存为其它文件。因为保存为其它的文件
对我来说,没有意义。
 
其实很容易:
MS.SaveToFile('data.txt');
但不安全,生成新文件如无误再删除原文件更好!
 
linsb的方法效率能保证吗?data.txt可是有30万行呀!
 
我没有数据不能测试,自己测一下吧,我也希望知道结果。
如不保密也可把数据寄给我。linsb3031@163.com
 
很显然每一行格式都是固定的
定义一个结构,用TFileStream.readbuffer
 
还是往数据库里倒吧
 
用两个stringlist比较方便,一个保存不同的行,一个分隔一行中不同的字段,两层循环,
共30万X4次循环,120万次,也不是很大啦。
 
如果有30多万,劝你还是导入到数据库中吧,用stringlist,得开销多少内存啊。
 
导入数据库再导出为文本也不难嘛.

全导到内存里面,怕承受不了的.
 
不,用tstringlist就可以了,30万行的操作,速度还是相当快的。
 
建议使用TClientDataSet
 
可以使用记录类型文件操作!可准确定位,且操作是在硬盘,而非内存
 
唉,谁能告我。为什么
 
后退
顶部