我需要将VB文件中的电话号码与VB6中SSMS数据库中的电话号码进行比较,而不使用.Net库。一个可能有一个数字为555-555-5555,另一个可能与(555)555-5555具有相同的数字,当比较字符串时,这显然会有所不同。 我知道我可以使用for循环和缓冲区来只输出数字字符,如:
Public Function PhoneNumberNumeric(PhoneNumberCSV As String) As String
Dim CharNdx As Integer
Dim buffer As String
For CharNdx = 1 To Len(PhoneNumberCSV) Step 1
If IsNumeric(Mid(PhoneNumberCSV, CharNdx, 1)) Then
buffer = buffer + Mid(PhoneNumberCSV, CharNdx, 1)
End If
Next
PhoneNumberNumeric = buffer
End Function
但这很贵。有没有更便宜的方法来做到这一点?
答案 0 :(得分:3)
这应该更快一些:
Private Function Clean(ByRef Original As String) As String
Dim I As Long
Dim J As Long
Dim Char As Long
Clean = Space$(10)
For I = 1 To Len(Original)
Char = AscW(Mid$(Original, I, 1))
If 48 <= Char And Char <= 57 Then
J = J + 1
If J > 10 Then Exit For 'Or raise an exception.
Mid$(Clean, J, 1) = ChrW$(Char)
End If
Next
End Function
它避免了字符串连接,ANSI转换和VBScript-form&#34; pigeon VB&#34; (使用慢速Variant函数)。