>local lcMask, lcDigits, lcLetters, lcAPNUniform >lcMask = "999999X-X999999X-X999999XX-XX999999X" >lcApn = padr(ltrim(m.tcAPN),36) >lcDigits = "0123456789" >lcLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ " >lcAPNUniform = chrtran(m.lcAPN, m.lcDigits+m.lcLetters, ; > replicate("9", 10)+ replicate("X", 27))>
* Returns a string of X's, to be used as a mask in a TRANSFORM statement * to return X's in the position of the passed symbol in the passed mask. FUNCTION RetFormat LPARAMETER tcMask, tcSymbol LOCAL lcFormat #DEFINE SYMBOL_NOT_IN_STRING "~" lcFormat = CHRTRAN (tcMask, CHRTRAN (tcMask, tcSymbol, SYMBOL_NOT_IN_STRING), SPACE (LEN (tcMask))) lcFormat = STRTRAN (lcFormat, tcSymbol, "X") RETURN lcFormat ENDFUNC PROCEDURE SetupPatternMatch LOCAL lcDigits, lcLetters, lcMask, lcANMask, lcNMask, lcSepMask, lcPattern, lcValid, ; lcSep, lcSepBlank, llValid lcDigits = "0123456789" lcDigitsBlank = SPACE (10) lcLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ " lcLettersBlank = SPACE (27) lcSep = "-" lcSepBlank = SPACE (1) lcMask = "X9-9X" lcANMask = RetFormat (lcMask, "X") lcNMask = RetFormat (lcMask, "9") lcSepMask = RetFormat (lcMask, "-") lcPattern = "A8-7B" && .T. * lcPattern = "A8-BB" && .F. * lcPattern = "A8-77" && .T. !!! llValid = EMPTY (CHRTRAN (TRANSFORM (lcPattern, lcNMask), lcDigits, lcDigitsBlank)) ; AND EMPTY (CHRTRAN (TRANSFORM (lcPattern, lcSepMask), lcSep, lcSepBlank)) ; AND (EMPTY (CHRTRAN (CHRTRAN (TRANSFORM (lcPattern, lcANMask), lcLetters, lcLettersBlank), ; lcDigits, lcDigitsBlank))) WAIT WINDOW TRANSFORM (llValid) ENDPROC