求救:怎样从*.txt文件中导入大数据量数据。。。。。。??

polarfoxhnly2008 2006-09-07 03:50:34
求救:怎样从*.txt文件中导入大数据量数据。。。。。。??
谢谢。。。。。。。。。。!!!
...全文
650 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
仰天长啸qsx 2006-09-13
  • 打赏
  • 举报
回复
*.txt数据文件必定是以固定的格式存储数据的,并且一定都是采用相同的分隔符。既然这样就可以写一个函数读取*.txt文件的内容进行解析。表结构知道了,那每个字段所占的字节也就知道了,取出数据赋值到数据窗口,一行保存一次并清空数据窗口,这样问题就解决了。
polarfoxhnly2008 2006-09-13
  • 打赏
  • 举报
回复
楼上的直接pb怎么导?对数据的格式有无特别要求..?
chessliu 2006-09-12
  • 打赏
  • 举报
回复
晕死,是txt格式的数据,为什么还要写程序? pb 就可以导入呀
陈义源 2006-09-08
  • 打赏
  • 举报
回复
string ls_file_name
setnull(ls_file_name)
ll_imp_return = datawindowname.importfile(ls_file_name ) //导入数据(TXT文件)

choose case ll_imp_return
case 0
case -1
messagebox('提示','没有检索到数据!')
case -2
messagebox('提示','导入的文件是空的!')
case -3
messagebox('提示','调用导入函数参数错误!')
case -4
messagebox('提示','导入文件时出错!请重试!')
case -5
messagebox('提示','不能打开文件!')
case -6
messagebox('提示','不能关闭文件!')
case -7
messagebox('提示','不能读取文件!')
case -8
messagebox('提示','倒入的文件不是有效的文本文件(.txt文件)!')
case -9
messagebox('提示','用户取消导入!')
case else
end choose
polarfoxhnly2008 2006-09-08
  • 打赏
  • 举报
回复
但是加入别人给的*.txt格式文件里面的数据不是按照一条记录一行,而是连续的那种‘数据流’样式的,怎么知道在哪个地方要重新插入...?
li_d_s 2006-09-08
  • 打赏
  • 举报
回复
失败的行数你可以记下来的啊,写日志或者配置文件保存当前多少条成功了的说
polarfoxhnly2008 2006-09-08
  • 打赏
  • 举报
回复
另外:ImportFile()这个函数对要导入的*.txt格式文件里面的数据保存格式有什么具体规定,比如:
121,111,123;123,111,234;或者121 111 123 ,123 111 234,或者...必须规定别人生成的*.txt文件里面的数据必须是......一条记录一行...等等其他限制
...........我要导的.txt文件是别人用c#生成的...里面除了要导的数据外,还有其他一些有规律的字符比如:;,换行符,但都是有规律的...
我的方法暂时已经解决了工作上的问题(一次可导8000条记录,需时:30秒左右..),不用那么急了..............但这个问题还是没有解决(导入超大数据量的数据时,我只能手工把*.txt文件的数据分别保存到几个*.txt文件,然后一个一个导...)
polarfoxhnly2008 2006-09-08
  • 打赏
  • 举报
回复
回复人:li_d_s(我是小鬼-日货?送我都不要,哪怕是丰田和日产的轿车) ( ) 信誉:104

大量数据的话最好分开导入,以便加快速度,可以采用:
1。importFile函数有提供起始行和导入行数的,一次导入一定量的行然后保存提交
2。用datastore一次性importfile,然后用rowscopy慢慢一部分一部分的将数据拷贝到另一个datastore去保存提交
............上面的2中方法,我感觉有一个问题,如果别人给的*.txt格式数据很大,那导入的时候,如果有一部分的一个插入操作失败,就全部rollback,而前一部分导入的数据已经commit,但是别人给的数据时一个文件,我怎么知道在哪个地方提交失败了或者说怎么知道一个*.txt数据文件中的哪些数据已经commit,我感觉没办法找...只有把表清空从头来。。。?
polarfoxhnly2008 2006-09-08
  • 打赏
  • 举报
回复
感谢各位!!!!!
问题已经解决了。
问题:
别人生成的数据保存为:*.txt格式,我要做的工作就是读取这些数据到我的ms sql数据库的一个表里面,楼上几位提到的用ms sql数据库里面附加的工具,我当时不知道有这种功能(早知道数据库能到*.txt格式文件里面的数据...我就不自己写程序了!!!)
解决方法:(用pb写程序)
用pb里面的fileread()函数读取文件,由于fileread()只能读取32765bytes大小的*.txt数据文件,所以,我写了一个循环不断的读,直到:fileread()不大于0,循环里有个计数器变量赋值有误,现在已经改正。可以读取:32765bytes几倍大小的数据。
现在发现个问题:pb里面的datawindow好像只能插入10000条记录,大于这个值,就不行
所以...................我感觉用这种方法导入大数据量时还是不行....不知各位朋友有什么更好的方法....(如果用Ms sql里的工具能直接导*.txt格式文件里面的数据就更好!!!)
li_d_s 2006-09-08
  • 打赏
  • 举报
回复
大量数据的话最好分开导入,以便加快速度,可以采用:
1。importFile函数有提供起始行和导入行数的,一次导入一定量的行然后保存提交
2。用datastore一次性importfile,然后用rowscopy慢慢一部分一部分的将数据拷贝到另一个datastore去保存提交
dawugui 2006-09-07
  • 打赏
  • 举报
回复
importfile()
看你是什么数据库,可以使用数据库的工具
wuya8115 2006-09-07
  • 打赏
  • 举报
回复
如果是往SQL 2000里导数据的话,可以直接用SQL里的DTS导入导出数据
wepwep 2006-09-07
  • 打赏
  • 举报
回复
你要告诉我们你想把txt导入到哪里啊?是你自己导还是客户用你写的软件导?
LRALY 2006-09-07
  • 打赏
  • 举报
回复
dw_1.ImportFile("文件路径")
txt文件的格式要和dw_1的格式一样
louzg 2006-09-07
  • 打赏
  • 举报
回复
用pb,inport-》打开*.txt-》即可

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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