問題:
有一個字符串例如: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的專欄