请问如何加快这种导入的速度?(100分)

T

teamans

Unregistered / Unconfirmed
GUEST, unregistred user!
如果我有一个几万个用户的文本文件,现在想排除掉相同的,不符合条件的用户,
我原来是将他们一行行的读到RICHEDIT中,然后用richedit1.Lines.IndexOf来判断
是否重复,重复就不导入,发现速度太慢,有没有好办法?
 
这个方法看看行不行:
先将文本文件倒入数据库,在用tquery控件select DISTINCT * from temp找出来没有重复的
再导成文本文件。
 
能否借助排序去判断
 
我有,我有,这样的情况我遇到过,我是这样解决的。
把你认为如果内容相同则视为同一个记录的字段的字段挑出来(好象话不通顺??[:D]),
意思就是说,比如通讯录中,如果姓名、电话、性别、通讯地址相同,视为重复记录,那么
在数据库中把这几个字段标成关键字段(不知道你用的是什么数据库类型),即关联不允许重复。
那么,你就用以下语句进行导入就可以了。
ADOQuery1.SQL.Text:='insert into table1 ...';
try
ADOQUERY1.ExecSQL;
except
end;
如果是相同记录,数据库就不允许Insert进去了,免去了你筛选的麻烦。
 
可以用ListView,设置排序,再用for循环检查就可以了,几万各用这个比较简单
 
一个个读入到TStringList中,设置其sort为true
然后顺序一个个判断。
 
如果没有显示的要求,可以直接用TStringList对象啊,
跟TRichEdit.Lines一样用,也可以进行排序,
肯定比RichEdit或者ListView快很多.因为这两者都要
用到大量的API调用,占用大量的系统资源..
例:
var
MyList: TStringList;
i: integer;
begin
MyList:=TStringList.Create;
MyList.LoadFromFile('c:/MyFile.txt');
MyList.Sort;
for i:=MyList.Count-1 do
wnto 1 do
if MyList=MyList[i-1] then
MyList.Delete(i);
MyList.SaveToFile('c:/MyFile1.txt');
MyList.Free;
end;
 
看了大家的,感觉还是我的方法比较好,我原来也是挨个判断,挨个处理,一次导入要30分钟,
改用这种方法以后,只要5分钟就搞定了。
 
用t1122的方法,用DISTINCT就可以把重复的去掉,不过不用导到数据库中,你新建一个文本
文件,从旧的里选出来再写到新的里就行了。就是不知道文本支持不支持DISTINCT,如果
不支持,那只好进数据库了。
 
crazycock的方法应该是最好的
 
我也这样认为。^_^
 
人家问的是编程问题,不是处理问题。
可以用TSTRINGLIST ,CREATE两个STRINGLIST ,一个LOADFROM(FILE),读入后,对它进行
各种处理,如排序,或用一些规则,处理方法可用SKYWEB的,再一条条倒到第二个STRINGLIST
然后写入RICHEDIT,LISTVIEW或FILE中,速度很快的,应该比用RICHEDIT来判断快多了。
 
FINISH 。
CRAZYCOCK 的只是方法,10只是汗水费哦。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
763
SUNSTONE的Delphi笔记
S
顶部