国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > sybase > PB快速去除字符串中的非数字字符

PB快速去除字符串中的非数字字符

来源:程序员人生   发布时间:2014-03-06 05:23:17 阅读次数:3843次
问题:
      有一个字符串例如:61B2993B2ACC8C57A2FB7F5FC587F84D ,
在PB中如何才能将其字符串中的字母去除了(将B、A、C、D、E、F...去除),
留下612993285727558784单纯数字的字符串。
 
      常规的方法是通过for循环,逐个进行判断并剔除,如:
[c-sharp]
string ls_str = "61B2993B2ACC8C57A2FB7F5FC587F84D",ls_rtn 
long ll_i 
for ll_i = 1 to len(ls_str) 
    if isnumber(mid(ls_str,ll_i,1)) then 
       ls_rtn += mid(ls_str,ll_i,1) 
     end if 
next 
messagebox("Caption","原来的值:" + ls_str + "~r现在的值:" + ls_rtn) 
 
      这种方法中规中矩,当然是一种合理的容易理解的解决方案。
    
      这里我们使用另外一种快捷的方法,用到的是EditMask控件的Mask属性。
      经过试验,发现:
      (1)当EditMask的MaskDataType属性设置为NumericMask!,Mask属性设置为“##...”时,最多可以输入16位的数字,粘贴数据时会自动过滤掉非数字的字符,当最终留下的数字个数超过16位时,第16位数的数字会根据第17位数字的大小来决定是否进1,而第17位开始的数字都会被替换为0;
      (2)当EditMask的MaskDataType属性设置为DecimalMask!,Mask属性设置为“##...”时,最多可以输入19位的数字,粘贴数据时会自动过滤掉非数字的字符,当最终留下的数字个数超过19位时,留下的字符串将为空字符串;
      (3)当EditMask的MaskDataType属性设置为StringMask!,Mask属性设置为“##...”时,可以输入无限的数字,粘贴数据时会自动将非数字的字符替换为空格符。
    
      根据以上试验,可以使用如下代码来实现替换:
[c-sharp]
//在界面上插入一个EDITMASK对象em_1,viaible = false 
long i 
string ls_sub, ls_deal 
string ls = '61B2993B2ACC8C57A2FB7F5FC587F84D' 
em_1.SetMask(decimalmask!, fill('#', 19)) 
do while true 
    i ++ 
    ls_sub = midw(ls, 19 * (i - 1) + 1, 19) 
    if ls_sub = '' then exit 
    em_1.text = ls_sub 
    ls_deal += em_1.text 
loop 
 
//这时候ls_deal中就只有612993285727558784了 
messagebox('', ls_deal) 
 
 
      至于用StringMask!属性时,结果如下:
[c-sharp]
//在界面上插入一个EDITMASK对象em_1,viaible = false 
string ls = '61B2993B2ACC8C57A2FB7F5FC587F84D' 
em_1.SetMask(stringmask!, fill('#', len(ls))) 
em_1.text = ls 
messagebox('', em_1.text) 
//这时候em_1.text中就只有61 2993 2   8 57 2  7 5  587 84 了   

摘自 yyoinge的专栏
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生