Private Sub Bytes_SetNCT() '在程序OnLoad时候先运行这个过程初始化表。
Dim tIndex As Long
ReDim priBytes_NCT(255)
For tIndex = 48 To 57
priBytes_NCT(tIndex) = True
Next
End Sub
Function NumberGetByString_UltraBytesFilter(ByVal pString As String) As String
Dim tBytes() As Byte
Dim tBytes_Length As Long
Private Function GetNumber(ByVal SourceString As String) As String
On Error GoTo GetNumberERR:
Dim i As Integer
Dim S() As String
Dim sN As String
SourceString = SourceString & " "
S = Split(SourceString, " ", -1, 1)
SourceString = S(0)
For i = 1 To Len(SourceString)
sN = Mid(SourceString, i, 1)
If IsNumeric(sN) Then
GetNumber = GetNumber & sN
End If
Next
Exit Function
GetNumberERR:
MsgBox Err.Description, vbCritical, "Error"
GetNumber = ""
End Function
Private Function GetNumber(ByVal SourceString As String) As String
On Error GoTo GetNumberERR:
Dim i As Integer
Dim S() As String
SourceString = SourceString & " "
S = Split(SourceString, " ", -1, 1)
SourceString = S(0)
SourceString = UCase(SourceString)
For i = 65 To 90
SourceString = Replace(SourceString, Chr(i), "")
Next
GetNumber = SourceString
Exit Function
GetNumberERR:
MsgBox Err.Description, vbCritical, "Error"
GetNumber = ""
End Function
Private Sub Form_Load()
'测试结果
Debug.Print NumberGetByString_BytesFilterPro("dh12j4j3h1 a123")
Debug.Print GetVal("dh12j4j3h1 a123")
Dim i As Long, st As Double
For i = 1 To 100
NumberGetByString_BytesFilterPro ("dh12j4j3h1 a123")
GetVal ("dh12j4j3h1 a123")
Next
st = Timer
For i = 1 To 10000
NumberGetByString_BytesFilterPro ("dh12j4j3h1 a123")
Next
MsgBox (Timer - st) * 1000
'============================
For i = 1 To 100
NumberGetByString_BytesFilterPro ("dh12j4j3h1 a123")
GetVal ("dh12j4j3h1 a123")
Next
st = Timer
For i = 1 To 10000
GetVal ("dh12j4j3h1 a123")
Next
MsgBox (Timer - st) * 1000
End Sub
'这是我的代码~~~~~~~~~~ 稍微快一点。just for fun !
Function GetVal(ByVal s As String) As String
Dim i As Long, j As Long
Dim b() As Byte
Dim bb() As Byte
b = s
ReDim bb(Len(s))
For i = 0 To UBound(b) Step 2
If b(i) = &H20 Then Exit For
If &H30 <= b(i) And b(i) <= &H39 Then
bb(j) = b(i)
j = j + 2
End If
Next
GetVal = Left(bb, j \ 2) '这样快 10% -20 %
'GetVal = bb '这样快 20% -30 % ,但末尾有空字符
End Function
'你的代码,原封未动
Function NumberGetByString_BytesFilterPro(ByVal pString As String) As String
Dim tBytes() As Byte
Dim tBytes_Length As Long
Function getit(ByVal x As String) As String
getit = Split(x, " ")(0)
Do While Not IsNumeric(Left(getit, 1))
getit = Replace(getit, Left(getit, 1), "")
Loop
getit = Val(getit)
End Function
Private Sub Command1_Click()
MsgBox getit("kk123 205-kk")
MsgBox getit("kk123205kk")
End Sub
to northwolves(狼行天下)
假如msgbox getit("1kk123")
是不是只输出1呀,??????
Function GetVal(ByVal s As String) As String
Dim i As Long
GetVal = ""
For i = 1 To Len(s)
If Mid(s, i, 1) = " " Then '遇到空格就退出循环
Exit For
End If
If IsNumeric(Mid(s, i, 1)) Then '是数字就保留
GetVal = GetVal & Mid(s, i, 1)
End if
Next
End Function
Function getit(ByVal x As String) As String
Dim i As Long, temp() As String
getit = Split(x, " ")(0)
ReDim temp(1 To Len(getit))
For i = 1 To Len(getit)
temp(i) = Mid(getit, i, 1)
If Not IsNumeric(temp(i)) Then temp(i) = ""
Next
getit = Join(temp, "")
Erase temp
End Function
Private Sub Command1_Click()
MsgBox getit("kk123 205-kk")
MsgBox getit("kk123s205kk")
End Sub