以非tab分隔的(如以“|”分隔)文本中的数据导入到数据窗口中的问题

Heavenfinder 2003-08-17 11:53:32
在文件中用TAB替换原分割符
文本文件远远大于32k,小于等于32k用fileread()和importfile()导入数据窗口没问题
如果大于32k,我用filelength()函数解决fileread()的循环次数,大数据量文本读入字符串没有问题,但是循环替换分隔符时可能溢出
假如分隔符为ac_separator = '|'
long ll_start_pos = 1
lc_tab = char(9) //TAB分隔符
ll_start_pos = pos(ls_mystring,ac_separator,ll_start_pos ))//ls_mystring为大数据量文本文件;
do while ll_start_pos > 0//ll_start_pos取|分隔符的位置
ls_mystring = replace(ls_mystring,ll_start_pos,1,lc_tab//lc_tab 为 tab分隔符
ll_start_pos = pos(ls_mystring,ac_separator,ll_start_pos + 1)//ac_separator为分隔符|
loop
谁能解决阿











...全文
59 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
killerdanny 2003-08-29
  • 打赏
  • 举报
回复
别用PB解决,速度才快。PB处理文本能力不成!
killerdanny 2003-08-29
  • 打赏
  • 举报
回复
sscanf(buff,"%[^|]|%[^|]|%[^|]|%[^|]|s",web_ip,UserID,UserPwd,web_servies);
bluerain1980 2003-08-29
  • 打赏
  • 举报
回复
你可以把文本文件按行模式读出再进行字符串截取这样会快一些我用过的
Heavenfinder 2003-08-28
  • 打赏
  • 举报
回复
还有没有好的解决办法?
sinkiangscorpio 2003-08-28
  • 打赏
  • 举报
回复
你全部导入后,在数据库中update,把|全部去掉。
Heavenfinder 2003-08-28
  • 打赏
  • 举报
回复
楼上的,能不能说的详细点,我不太明白:以'|'为分隔符的文本怎么导入,怎么用update去掉'|'
liliang800207 2003-08-26
  • 打赏
  • 举报
回复
用行模式吧
纳米茶 2003-08-26
  • 打赏
  • 举报
回复
用行模式进行导入吧,不要全部替换以后再一次性的导入。一行一行的替换'|'为''(tab)
Heavenfinder 2003-08-26
  • 打赏
  • 举报
回复
up
Heavenfinder 2003-08-24
  • 打赏
  • 举报
回复
up
Heavenfinder 2003-08-23
  • 打赏
  • 举报
回复
我要读取的文本文件的的大小是1M~3M的大小,否则我也不需要用filelength()函数解决fileread()的循环次数
鸡翅多 2003-08-23
  • 打赏
  • 举报
回复
既然是导入到DW中,那么你的数据应该是一条一条的吧,也就是说你要读取数据的文件应该是LINEMODE的话那就应该不存在大于32K的情况吧(除非你一条记录就有这么大?),那么你设定一个可以显示出来的东西帮忙你看一下你的进度,不就知道在什么地方停住了,找到了地方,你去看一下是不是那条记录本身就有问题,是不符合格式要求的一条记录?如果理解有误,请见谅,呵呵。
Heavenfinder 2003-08-22
  • 打赏
  • 举报
回复
楼上的师兄,你这一步我都做好了,题目中我也提到过:"如果大于32k,我用filelength()函数解决fileread()的循环次数,大数据量文本读入字符串没有问题,但是循环替换分隔符时可能溢出."你做的和我做的一抹一样,文件读入字符串一点问题也没有,就是在替换分隔符的时候出错(文件的分隔符不是tab,比如说是“|”分隔符,所以要替换为tab分隔符),替换时可能数据量太大,用debug跟踪看了看前面替换的没有问题,可是运行的时候等了20分钟没有反应。
pbtech 2003-08-21
  • 打赏
  • 举报
回复
ll_filelen=filelength(ls_file)//ls_file对应文件名
li_filenum=fileopen(ls_file,streammode!,read!,lockread!)
if ll_filelen>32765 then
li_loops=((ll_filelen - 1)/32765)+1
else
li_loops=1
end if
//read file
for li_counter=1 to li_loops
...//多次替换
next
Heavenfinder 2003-08-20
  • 打赏
  • 举报
回复
请教如何分次替换分隔符
klbt 2003-08-18
  • 打赏
  • 举报
回复
你不要企图一次替换完,分次做比较好。
Heavenfinder 2003-08-18
  • 打赏
  • 举报
回复
ls_mystring没有问题,我用debug跟踪发现ls_mystring正确,就是在替换tab分隔符时没有反应,用debug跟踪看了看前面替换的没有问题,可是运行的时候等了20分钟没有反应
pbtech 2003-08-18
  • 打赏
  • 举报
回复
这些一般做法是
fileopen文件->替换->filewrite新文件->import
pbtech 2003-08-18
  • 打赏
  • 举报
回复
算法正确
现在有什么问题
qiyousyc 2003-08-18
  • 打赏
  • 举报
回复
我怀疑是ls_mystring的长度超出了范围。
加载更多回复(1)

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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