Quantcast
Channel: IBM Mainframe Computers Forums
Viewing all articles
Browse latest Browse all 8500

CLIST & REXX :: Reasonable way of checking wildcards using REXX

$
0
0
Author: sergeyken
Subject: Reasonable way of checking wildcards using REXX
Posted: Wed Sep 07, 2016 8:43 pm (GMT 5.5)

My post has been deleted from wrong forum by moderators.

Here is slightly updated copy FYI.

My version is using REXX as REXX, neither as COBOL, nor as C/C++, nor anything else.
For nails, a hammer is the best tool, while for screws a screwdriver is more suitable. For bolts the best tool is a wrench. Not vice versa; do not mix them!

Code:
/* REXX */                                                         
Test:                                                               
                                                                   
Wild = 'A?C*3'                                                     
Str = 'ABC123'                                                     
Say "$WildStr( '"Str"', '"Wild"' ) ==>" $WildStr( Str, Wild )       
                                                                   
Wild = 'A?C*3??5*'                                                 
Str = 'ABC---3xx5yyyyy'                                             
Say "$WildStr( '"Str"', '"Wild"' ) ==>" $WildStr( Str, Wild )       
                                                                   
Wild = '*A?C*3??5*'                                                 
Str = 'zzzzzzABC---3xx5yyyyy'                                       
Say "$WildStr( '"Str"', '"Wild"' ) ==>" $WildStr( Str, Wild )       
                                                                   
Wild = 'A?C*3??5*'                                                 
Str = 'ABC---3xxxx5yyyyy'                                           
Say "$WildStr( '"Str"', '"Wild"' ) ==>" $WildStr( Str, Wild )       
                                                                   
return                                                                 
/**********************************************************************/
$WildStr: /* verify String against complex StrMask */ procedure         
/* Call:                                                               
      If $WildStr( MemberName, '*AB*C???0*1*' ) Then ...               
      If $WildStr( MemberName, '*AB*C%%%0*1*', , '%' ) Then ...         
      If $WildStr( MemberName, '*AB~C???0~1~', '~' ) Then ...           
*/                                                                     
                                                                       
Parse Arg String, StrMask, StrChar, WildChar                           
If StrChar = '' Then StrChar = '*'                                     
Else                 StrChar = Left( StrChar, 1 )                       
                                                                       
If WildChar = '' Then WildChar = '?'                                   
Else                  WildChar = Left( WildChar, 1 )                   
                                                                       
Do While StrMask > ''                                                   
   Parse var StrMask,   /* split by the first '*' */                   
      PreWild (StrChar) StrMask                                         
   If PreWild > '' Then Do /* check left from '*' as simple wildcard */
      LeftStr = Left( String, Length(PreWild) ) /* same size fragment */
      If ¬ $WildEq( LeftStr, PreWild, WildChar ) Then                   
         Return 0                                                       
   End                                                                 
   If StrMask = '' Then /* whole string verified successfully */       
      Return 1                                                         
                                                                       
   /* try to match the '*' found as next part */                       
   Do i = (Length(PreWild) + 1) To Length(String)                       
      /* skip left characters one by one; verify the rest recursively */
      RestStr = Substr( String, i )                                     
      If $WildStr( RestStr, StrMask, StrChar, WildChar ) Then           
         Return 1                                                       
   End i                                                               
End                                                                     
                                                                       
Return 0                                                               
/**********************************************************************/
$WildEQ: /* verify String against simple WildMask */ procedure         
/* Call:                                                               
      If $WildEQ( MemberName, 'ABC???01' ) Then ...                     
      If $WildEQ( MemberName, 'ABC%%%01', '%' ) Then ...               
*/                                                                     
Parse Arg String, WildMask, WildChar                                   
                                                                       
If WildChar = '' Then WildChar = '?'                                   
Else                  WildChar = Left( WildChar, 1 )                   
                                                                       
LowMask = Translate( WildMask, '00'x, WildChar )                       
HiMask  = Translate( WildMask, 'FF'x, WildChar )                       
                                                                       
LowString = BitOr( LowMask, String, ' ' )                               
HiString = BitAnd( HiMask,  String, ' ' )                               
                                                                       
Return (LowString == HiString)                                         
/**********************************************************************/

_________________
Tyrannosaurus-REXX


Viewing all articles
Browse latest Browse all 8500

Trending Articles