Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2298981
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Sybase

2013-02-11 14:11:43

经常有人在询问如何快速将文本文档中的“,”批量替换为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 ls
int li
oleObject 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   =   0
ADODB.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)
 
阅读(5482) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~