Ooops
January 26, 2021, 05:21:30 AM

Author Topic: [bb] matchPattern by ShadowTurtle [ 1+ years ago ]  (Read 505 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] matchPattern by ShadowTurtle [ 1+ years ago ]
« on: June 29, 2017, 12:28:38 AM »
Title : matchPattern
Author : ShadowTurtle
Posted : 1+ years ago

Description : compare a source String with a String expression.

** Syntax **
  result = matchPattern(source_string$, expression_pattern$, case_sensitivity)

** Parameters **
source_string
 Target String To compare pattern against.
expression_pattern
 Wildcard expression pattern:
 ? = Any single character Zero Or more characters
 # = Any single digit (0-9)
 case_sensitivity = Toggle for case sensitivity (true Or false).

** Return **
 "True" or "False"


Code :
Code: BlitzBasic
  1. ; ------------------------------------------------------------------------
  2. ; compare a source String with a String expression.
  3. ;
  4. ; ** Syntax **
  5. ;   result = matchPattern(source_string$, expression_pattern$,
  6. ;     case_sensitivity)
  7. ;
  8. ; ** Parameters **
  9. ;   source_string            Target String To compare pattern against.
  10. ;   expression_pattern       Wildcard expression pattern:
  11. ;   ?                        Any single character
  12. ;   *                        Zero Or more characters
  13. ;   #                        Any single digit (0-9)
  14. ;   case_sensitivity         Toggle for case sensitivity (true Or false).
  15. ;
  16. ; ** Return **
  17. ;   "True" or "False"
  18. ; ------------------------------------------------------------------------
  19. Function matchPattern(stri$, pattern$, lCase = False)
  20.         prevChar$ = ""
  21.         nextChar$ = ""
  22.        
  23.         If lCase = True Then
  24.                 stri$ = stri$ + Chr(0)
  25.                 pattern$ = pattern$ + Chr(0)
  26.         Else
  27.                 stri$ = Upper(stri$ + Chr(0))
  28.                 pattern$ = Upper(pattern$ + Chr(0))
  29.         End If
  30.        
  31.         retBack = False
  32.        
  33.         x = 1
  34.         y = 1
  35.        
  36.         Repeat
  37.                 If Mid(stri$, x, 1) = Chr(0) Then
  38.                         If Mid(pattern$, y, 1) = Chr(0) Then
  39.                                 retBack = True
  40.                         End If
  41.                         Return retBack
  42.                 EndIf
  43.                
  44.                 If Mid(pattern$, y, 1) = Chr(0) Then
  45.                         Return retBack
  46.                 ElseIf Mid(pattern$, y, 1) = Chr(35) Then
  47.                         x_asc = Asc(Mid(stri$, x, 1))
  48.                         If x_asc < 48 Or x_asc > 57 Then
  49.                                 Return retBack
  50.                         End If
  51.                 ElseIf Mid(pattern$, y, 1) = Chr(42) Then
  52.                         y = y + 1
  53.                         Repeat
  54.                                 If Mid(stri$, x, 1) = Mid(pattern$, y, 1) Then
  55.                                         Exit
  56.                                 ElseIf Mid(stri$, x, 1) = Chr(0) Then
  57.                                         Exit
  58.                                 End If
  59.                                 x = x + 1
  60.                         Forever
  61.                         If Mid(stri$, x, 1) = Chr(0) Then
  62.                                 If Mid(pattern$, y, 1) = Chr(0) Then
  63.                                         retBack = True
  64.                                 End If
  65.                                 Return retBack
  66.                         End If
  67.                 ElseIf Mid(pattern$, y, 1) = Chr(63) Then
  68.                         ; nothing to do, it's a match
  69.                 Else
  70.                         If Mid(pattern$, y, 1) <> Mid(stri$, x, 1) Then
  71.                                 Exit
  72.                         End If
  73.                 End If
  74.                
  75.                 x = x + 1
  76.                 y = y + 1
  77.         Forever
  78. End Function


Comments :


slenkar(Posted 1+ years ago)

 do you have an example?


ShadowTurtle(Posted 1+ years ago)

 
Code: [Select]
DebugLog matchPattern( "hello, i am a example.", "hello*", True )
DebugLog matchPattern( "hello, i am a example.", "h?ll?*", True )
DebugLog matchPattern( "hallow, i am a exampel.", "h?ll?*examp*", True )
RuntimeError "See debug log window"



slenkar(Posted 1+ years ago)

 thanks quite useful!


BlitzSupport(Posted 1+ years ago)

 Nice, could come in handy.(Interestingly, apart from the comment symbol [;] it works without change in both BlitzMax and Blitz3D/Plus.)


chi(Posted 1+ years ago)

 nice function... thx [/i]

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal