VB6 字串中的數字 (10點)

2011-08-22 8:25 pm
Dim txt as string
txt="Hello123girl456boy789"


如何刪除字串中數字以外的資料
以上面的例子來說,經過處理後能得到"123456789"

回答 (6)

2011-08-22 9:02 pm
✔ 最佳答案
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會幫你初始的心態,絕對不值得鼓勵。

模組化也是可從小程式便操練,爾後程式越寫越大,才能從容的應用。
2011-08-23 11:46 pm
我的直覺這題會直接進入投票

哈 真準。
2011-08-23 3:11 pm
變數習慣先宣告的部分相當同意「東邪無弓」大大

的說法,雖然我寫的程式都是小公司的系統,但是

程式最少也有幾千行,需要寫個幾個星期,有時候

今天寫完隔天就忘了自己用過哪些變數,結果造成

抓錯就抓了一個多小時,甚至有時候是變數多打一

個字或少打一個字,所以現在都習慣先宣告變數。
2011-08-22 11:21 pm
Private Sub Command1_Click()
Dim txt As String
txt = "Hello123girl456boy789" For i = 1 To Len(txt)
word = Mid(txt, i, 1)
If IsNumeric(word) Then num = num + word
Next i
Print num
End Sub


2011-08-22 21:15:32 補充:
我同意"東邪無弓"的說法。

但是如果程式碼不是幾千行的話,應不致影響程式執行效能。

畢竟寫程式最終目的是,快速且正確的答案是第一要件。
參考: me
2011-08-22 10:07 pm
IsNumeric("字串") --> 回傳True / False

2011-08-22 17:04:08 補充:
回答的兩位大大已經把兩個方法都寫出來.. 囧

2011-08-22 23:18:23 補充:
速度上 <~ 同意
好詳細的解釋, 可惜沒有頂置..
2011-08-22 8:43 pm
依序檢查每個字是否為數字
或ASCII介於48~57


收錄日期: 2021-04-24 10:55:03
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20110822000015KK03682

檢視 Wayback Machine 備份