Results 1 to 35 of 35

Thread: Can you do it faster??

Threaded View

  1. #1

    Thread Starter
    Addicted Member *PsyKE1*'s Avatar
    Join Date
    Jun 2010
    Location
    Spain
    Posts
    243

    Question Can you do it faster??

    Hi all, here is my way to extract numbers of text .
    Can you do it faster without RegExp?
    vb Code:
    1. Option Explicit
    2. Option Base 0
    3.  
    4. Private Declare Function ArrayPtr Lib "msvbvm60" Alias "VarPtr" (ByRef Ptr() As Any) As Long
    5. Private Declare Sub PutMem4 Lib "msvbvm60" (ByVal Ptr As Long, ByVal Value As Long)
    6.  
    7. Private Function GetNumbersbyStringI(ByRef sText As String) As String()
    8. Dim intAsc()                                    As Integer
    9. Dim lngAscHeader(5)                             As Long
    10. Dim lngPos                                      As Long
    11. Dim strNum                                      As String
    12. Dim strTempArr()                                As String
    13. Dim lngTextLen                                  As Long
    14. Dim Q                                           As Long
    15.  
    16.     lngTextLen = LenB(sText) \ 2 + 1
    17.     If lngTextLen > 1 Then
    18.         ReDim strTempArr$(0)
    19.    
    20.         lngAscHeader(0) = 1
    21.         lngAscHeader(1) = 2
    22.         lngAscHeader(3) = StrPtr(sText)
    23.         lngAscHeader(4) = lngTextLen
    24.         PutMem4 ArrayPtr(intAsc), VarPtr(lngAscHeader(0))
    25.        
    26.         Do Until lngPos = lngTextLen
    27.             Do
    28.                 If intAsc(lngPos) < 48 Then Exit Do
    29.                 If intAsc(lngPos) > 57 Then Exit Do
    30.                 strNum = strNum + ChrW$(intAsc(lngPos))
    31.                 lngPos = lngPos + 1
    32.             Loop Until lngPos = lngTextLen
    33.            
    34.             If LenB(strNum) Then
    35.                 strTempArr(Q) = strNum
    36.                 strNum = vbNullString
    37.                
    38.                 Q = Q + 1
    39.                 ReDim Preserve strTempArr$(Q)
    40.             End If
    41.            
    42.             lngPos = lngPos + 1
    43.         Loop
    44.         PutMem4 ArrayPtr(intAsc), 0
    45.         GetNumbersbyStringI = strTempArr
    46.     End If
    47. End Function

    vb Code:
    1. Private Sub Form_Load()
    2. Const s                     As String = "hi 345 vivan 09453 las456 r4n4s 1 lov3 vbf0rum5"
    3. Const sLine                 As String = "--------------------------------"
    4. Dim vItem                   As Variant
    5.    
    6.     Debug.Print sLine; "Array", Time$
    7.     For Each vItem In GetNumbersbyStringI(s)
    8.         Debug.Print vItem
    9.     Next vItem
    10. End Sub
    Give me advice, I want to improve.

    Thanks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width