怎么向表中导入文本数据?

nihaomaxiao 2005-05-12 10:36:26
在PB中,怎么向表中导入文本数据?怎么提交?
...全文
175 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzip 2005-05-16
  • 打赏
  • 举报
回复
支持逐行读取,数据的操作性强
lzheng2001 2005-05-16
  • 打赏
  • 举报
回复
上面的代码效率不够好,应该用linemode!来读取文本文件,再续行导入. 当文件越大时,你会体现到两种方法的性能差别会越大

给一个例子参考: 以","作为分隔符的txt文件
string str_pname,str_fname,ls_buffer
integer li_rtn,li_FileNum,li_pos
li_rtn=GetFileOpenName("请选择导入的文件",str_pname,&
str_fname,"TXT","Text Files(*.txt),*.txt")
li_FileNum=FileOpen(str_pname,LineMode!)
li_rtn=FileRead(li_FileNum,ls_buffer)
DO WHILE li_rtn<>-100 //逐行读取数据
li_pos=Pos(ls_buffer,",")
DO WHILE li_pos>0 //替换读取数据中的“,”为TAB分隔
ls_buffer=Replace(ls_buffer,li_pos,1,"~t")
li_pos=Pos(ls_buffer,",")
LOOP
dw_import.importstring(ls_buffer)
li_rtn=FileRead(li_FileNum,ls_buffer)
LOOP
aichangfeng 2005-05-16
  • 打赏
  • 举报
回复
都說了,我就不說了,呵呵
chengtwn 2005-05-15
  • 打赏
  • 举报
回复
呵呵刚做了一个文件导入的程序。
在窗口上放一个数据窗口,数据源选要导入的表,再放一个导入按钮
窗口打开时的open事件写
dw_jbda.settransobject(sqlca)
导入按钮代码:
delete insurance.yb_grjbda_temp;
commit;
dw_1.importfile("c:\1.txt")
dw_1.update()
commit;

j9dai 2005-05-12
  • 打赏
  • 举报
回复
提交导入后update()就可以
j9dai 2005-05-12
  • 打赏
  • 举报
回复
用数据窗口控件的importfile(filename)函数
filename:String类型,其值是要复制数据文件的文件名。文件的内容必须是以tab字符作为分隔符的文本文件,或者是dbaseII/III格式的文件。指定文件名时,需要指定文件的全名,其中包括扩展名部分。
braversmmu 2005-05-12
  • 打赏
  • 举报
回复
//函数功能:将非TAB分割符文本文件倒入数据窗口,可判断文件长度,如大于32KB需要用FileRead函数循环读取,
//参数:adw_name :数据窗口
// as_filename :倒入文件名
// ac_separator:分割符,如“|”


long ll_start_pos = 1,i,ll_fileLength
string ls_mystring,Lstring,Rstring
integer li_FileNum,loops,j,FileNum
char lc_tab
string ls_tempfile
int li_rtn

ll_fileLength= FileLength(as_filename)
messagebox("",string(ll_filelength))
li_FileNum = FileOpen(as_filename,StreamMode!, Read!)
If isnull(li_FileNum) or li_FileNum < 0 then return -2


IF ll_filelength > 32765 THEN
IF Mod(ll_filelength, 32765) = 0 THEN
loops =ll_filelength/32765
ELSE
loops = (ll_filelength/32765) + 1
END IF
ELSE
loops = 1
END IF
messagebox("",string(loops))
FOR j = 1 to loops
ll_start_pos =1
FileRead(li_FileNum, ls_mystring)
ls_mystring=trim(ls_mystring)
lc_tab = char(9) //TAB分割符
//找第一个分割符
ll_start_pos = Pos(ls_mystring, ac_separator, ll_start_pos)
//循环替换分割符
DO WHILE ll_start_pos > 0
i=len(ls_mystring)
//替换分割符
ls_mystring = Replace(ls_mystring, ll_start_pos, 1, lc_tab)
//删除数据中的空格
Lstring=left(ls_mystring,ll_start_pos - 1)
Rstring=right(ls_mystring,i - ll_start_pos + 1)
ll_start_pos=ll_start_pos - len(Lstring)
Lstring=trim(Lstring)
ll_start_pos=ll_start_pos + len(Lstring)
ls_mystring=Lstring+Rstring
ll_start_pos = Pos(ls_mystring, ac_separator, ll_start_pos + 1 )
LOOP


//在当前目录下生成临时文件
ls_tempfile = GetCurrentDirectory() + "\importfile_tmp.txt"
FileNum = FileOpen(ls_tempfile,StreamMode!, Write!, LockWrite!, append! )
FileWrite(FileNum, ls_mystring)
FileClose(FileNum)
NEXT

//将临时文件内容倒入数据窗口
li_rtn = adw_name.ImportFile(ls_tempfile)
//删除临时文件
FileDelete ( ls_tempfile )
FileClose(li_FileNum)
return li_rtn
dragon45 2005-05-12
  • 打赏
  • 举报
回复
DELIMITED BY string
可以指定~
string是相应的ASCII码
如tab是:
DELIMITED BY '\x09'
别的查一下ASCII表就可以了~
moonmare 2005-05-12
  • 打赏
  • 举报
回复
那文本文件不是按照TAB分隔的情况怎么办?
dragon45 2005-05-12
  • 打赏
  • 举报
回复
还可以用动态sql语句,执行load table table_name from "filename"

Function

To import data into a database table from an external ascii-format file.

Syntax

LOAD [ INTO ] TABLE [ owner ].table-name

... FROM 'filename-string'
... [ FORMAT 'ascii' ]
... [ DELIMITED BY string ]
... [ STRIP { ON | OFF } ]
... [ QUOTES { ON | OFF } ]
... [ ESCAPES { ON | OFF } ]
... [ ESCAPE CHARACTER character ]
... [ WITH CHECKPOINT { ON | OFF } ]

不过这种方法在效率上不如用dw的函数简单
两者相差一个数量级——昨天用了上万条记录来测试过~

1,075

社区成员

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

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