当前位置:首页 > 技能相关 > PowerBuilder > 正文内容

pb快速替换文本文档(txt文件)中指定字符的方法

admin3年前 (2022-06-26)PowerBuilder3740 修订时间:2022-06-26 20:25:37

经常有人在询问如何快速将文本文档中的“,”批量替换为Tab制表符,以方便将文本文档快速导入datawindow中。
大多数PB程序员都是建议使用fileopen、fileread(9及以前版本。10及以后版本用filereadex)的方法读入,然后再自己写个函数进行字符串的replace 。这种方法未尝不可,只是效率太低。
下面给出一种使用ole进行处理的方法,该方法集成在如下全局函数f_txt_replace (string as_file, string as_search, string as_replace)中。

global function long f_txt_replace (string as_file, string as_search, string as_replace);
string lsint lioleObject ADODB,ScrCtl//(1)打开并读取文件
ADODB = CREATE OLEObject   
if ADODB.ConnectToNewObject("ADODB.Stream") <> 0 then
messagebox('', '无法连接【ADODB.Stream】!')
return -1
end if
ADODB.Type = 1 //二进制数据Binary
ADODB.Mode =3 //具有读/写权限
ADODB.Open()
ADODB.LoadFromFile(as_file)
ADODB.Position = 0 //Position为0才能设置Charset
ADODB.Type = 1 //blob数据
ls = string(ADODB.Read() )//(2)替换文本内容
ScrCtl = create oleobject
if ScrCtl.connecttonewobject("MSScriptControl.ScriptControl") <> 0 then
messagebox('', '无法连接【MSScriptControl.ScriptControl】!')
return -1
end if
ScrCtl.Language = "JavaScript"ScrCtl.Eval("function clrn(str){return str.replace(/" + as_search + "/g,'" + as_replace + "')}")
ls = string(ScrCtl.CodeObject.clrn(ls))
destroy ScrCtl//(3)保存并关闭文件
ADODB.Position = 0ADODB.write(blob(ls))//保存为文本文件
ADODB.SaveToFile( as_file, 2) //清空缓冲区数据
ADODB.flush() //关闭流
ADODB.Close()
destroy ADODB
return len(ls)
end function


调用方法如下:

long ll_size
ll_size = f_txt_replace('e:\a.txt', ',', '~t') //将半角逗号, 替换为制表符
messagebox('替换后文件大小', ll_size)
 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=188

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。