用Delphi的 findfirst(),findnext()查找文件,结果不对。(50分)

  • 主题发起人 主题发起人 dwj_dd
  • 开始时间 开始时间
D

dwj_dd

Unregistered / Unconfirmed
GUEST, unregistred user!
问题一:
用Delphi的 findfirst(),findnext()查找文件,结果不对。
程序如下:
if FindFirst(path+f_name1+'*.zip', FileAttrs, sr)=0 then
begin
repeat
....
until (FindNext(sr)<>0) or (f_name1=f_name2)
FindClose(sr);
end;
我给出的f_name1:='200110',目的是想找以'200110'开始的一系列.zip文件。
如果正常的话应该先找到'20011008.zip',结果我的结果却是'20011009.zip',
如果把'20011009.zip'删除,结果是'20011010.zip'。
问题二:
有如下格式的文本文件:
1 4580640480004806 0.00 0.00 868.50 0.00
2 4580640480007803 3,174.10 0.00 0.00 0.00
3 4580640480014109 0.00 0.00 3,778.23 0.00
4 4580640480040016 7.73 96,398.95 0.00 0.00
5 4580640480040024 53,198.00 1,640,779.40 0.00 0.00
6 4580640480040040 0.00 22,865.81 3,339.63 25,771.56
7 4580640480040057 21,353.09 188,749.85 0.00 0.00
8 4580640480040065 0.00 0.00 0.00 0.00
9 4580640480040073 0.00 0.00 0.00 0.00
10 4580640480040081 0.00 102.80 768.71 0.00
我想把这些数据的第二、三列导入Sql-Server数据库中,或者是所有列。开始我用文本操作函数readln(),
一行,一行处理,但文本中数据太多,有十几万条纪录,处理起来相当慢。
我试过用sql中的bcp和bulk insert,但是没有成功,可能是因为该文本文件列与列之间
没有分割符。有没有一种自动成批的数据导入方法?并且能够在Delphi 6.0中实现。
有那位朋友愿意替我解答!将有重谢!
 
帮你提前
 
具体思想是:先将字符串进行调整,然后把串中每个字符同分割符比较,
将不是分割符的字符追加到MyStr串中,最后得到一个字段的内容。
通过一个循环,就可以将一个字符串分成几个字段。(将每一行文本作为一个字符串)
 
但是面对十几万行纪录,这样一行行处理,而且每天都要做相同的工作(文本文件每天的数据都不一样)
,处理速度难以让人接受。
 
问题一:
if FindFirst(DirName + '*.*', FileAttrs, sr) = 0 then
begin
DeleteFile(DirName + Sr.Name);
while FindNext(sr) = 0 do
DeleteFile(DirName + Sr.Name);
FindClose(sr);
result := true;
end;
问题二:
以行的方式来处理这样的文件,速度上会无法接受。
列与列之间没有分隔符?那是否每列都是定长的?从楼主贴出来的内容来看是这样的。
我用的是oracle,对sql server不是太熟。
我会先用sql loader将文本文件的内容全部加载到一临时表中,然后再进行后续处理。
sql server的工具不能将字段定长的文件加载到数据库中?感觉上应该是可以的。
 
问题一:
这个不一定,取出的结果与文件分区表中的存放有关。顺序对你的程序处理很重要吗?

问题二:
对丁长的文本数据文件用bcp应定义其格式文件,具体你可参考一下帮助
 
后退
顶部