✔ 最佳答案
Function DigitFilter(s As String) As String
Dim i As Integer, ds As String, ch As String * 1
ds = ""
For i = 1 To Len(s)
ch = Mid(s, i, 1)
If ch >= "0" And ch <= "9" Then ds = ds & ch
Next i
DigitFilter = ds
End Function
Private Sub Command1_Click()
Print DigitFilter("Hello123girl456boy789")
End Sub
2011-08-22 17:09:00 補充:
當條條道路通羅馬時,有經驗的會選一條最便捷的路。
IsNumeric,是查核某字串是否能轉為數值,
該函數的內部動作是複雜的,
雖也可順利辨別某字元是否為數字,但有點像是用牛刀來削蘋果。
以本題要判斷單一字元是否為數字,
用 If ch >= "0" And ch <= "9" 在執行時絕對比用 if IsNumeric(ch) 來得有效率。
表面上從源碼上來看,後者似較簡潔,但該函數的內部動作卻繁瑣許多!
2011-08-22 17:23:03 補充:
ISNumeric有其適用的場合,比如要判斷某字串是否可順利轉為數值時,
例如:"123.4ASD", "A123", "123A"......等會傳回 False;
"123.34", "-1.23","1.2E3"......等會傳回 True。
據此以觀, IsNumeric 函數可完成上述這類資料的判斷,會是簡單的動作嗎?
所以,有經驗者在做類似本題僅是單純判斷字元是否為數字時,
寧可用 If ch >= "0" And ch <= "9" 這樣的方式,
一來從源碼來看,淺顯明確;
二來從執行效率上來看,不會多做一些不必要的工作,當然較有效率。
2011-08-22 17:25:22 補充:
當條條道路通羅馬時,有經驗的會選一條最便捷的路。
IsNumeric,是否適用於本題,請參閱回答內文的補充說明。
2011-08-23 00:01:26 補充:
寫程式,不能因小程式而有所輕率敷衍,
否則,不良習慣一旦養成了,
有朝一日要寫大程式時便極有可能吃盡苦頭!
VB雖然允許你不經宣告便可使用變數,
這在小程式可能不覺有何不妥,但若在大程式常是找不出BUG的根源。
有些變數不初始其值,沒關係,
但有些變數若不初始,則會產生錯誤的結果。
若心存仰賴VB會幫你初始的心態,絕對不值得鼓勵。
模組化也是可從小程式便操練,爾後程式越寫越大,才能從容的應用。