PB快速去除字符串中的非数字字符
问题:有一个字符串例如: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的专栏