guides:programming:programmers_reference_manual:zip_format_conversion

ZIP_FORMAT Conversion

ZIP_FORMAT converts entered numbers into a valid US 5-digit or 9-digit zip code, or a valid Canadian Postal Code format. This can be extended to include other country codes. The code is included in OpenInsight, with the source in the SYSPROCS table in the SYSPROG account.

COMPILE SUBROUTINE ZIP_FORMAT(CHARSTR CONV, CHARSTR ANS, CHARSTR BRANCH, CHARSTR RETURN_DATA)

*

*   ZIP_FORMAT is an example of a developer's custom prompt formatting
 
*   routine using the square brackets call.
 
*
 
*   It should be placed in square brackets, like this:
 
*
 
*                   [ZIP_FORMAT]
 
*
 
* This subroutine properly formats any reasonable string of numbers and characters
 
* into a consistent US Zip or Canadian Postal Code format.
 
*
 
*  Subroutine declarations
 
DECLARE FUNCTION MSG
 
*  Local Equates
 
*  The STATUS() variable is used to indicated the error condition of the
 
*  pattern. They are:
 
EQU VALID$         TO 0    ;* Successful
 
EQU INVALID_MSG$   TO 1    ;* Bad Data       -   Print error message window
 
EQU INVALID_CONV$  TO 2    ;* Bad Conversion -          "         "
 
EQU INVALID_NOMSG$ TO 3    ;* Bad but do not print the error message window
 
*  Begin Conversion
 
*
 
BEGIN CONDITION
 
PRE:
 
POST:
 
END CONDITION
 
 
 
RETURN_DATA = ""
 
IF ANS NE "" THEN
 
ZIP = ANS
 
ANS = ""
 
STATUS() = VALID$
 
CONVERT " -" TO "" IN ZIP
 
LENGTH = LEN( ZIP )
 
* A case statement is used to validate all possible types of Postal Codes.
 
* If a new format is required, simply add another case.
 
* The fall-through (CASE 1) traps invalid conversions.
 
BEGIN CASE
 
CASE LENGTH = 5 AND NUM( ZIP )
 
* standard five digit US zip code.
 
RETURN_DATA = ZIP
 
CASE LENGTH = 9 AND NUM( ZIP )
 
* standard nine digit US zip code.
 
IF CONV = "OCONV" THEN
 
RETURN_DATA = FMT( ZIP, "L#####-####" )
 
END ELSE
 
RETURN_DATA = ZIP
 
END
 
CASE LENGTH = 6 AND  ZIP MATCHES "1A1N1A1N1A1N"
 
* Canadian-style Postal Code.
 
IF CONV = "OCONV" THEN
 
RETURN_DATA = FMT( ZIP, "L### ###" )
 
END ELSE
 
RETURN_DATA = ZIP
 
END
 
CASE 1
 
* No pattern matches met.  If called from an input pattern, display
 
* error message.
 
IF CONV = "ICONV" THEN
 
RESP = MSG('' , ZIP:" is not a valid Zip code. Please enter a five or nine digit number in any format, or a Canadian-style Postal Code." )
 
END
 
STATUS() = INVALID_NOMSG$
 
END CASE
 
END
 
RETURN
 
*
 
* Source Date: 17:02:51  23 APR 1993  Build ID: OI*1.0.144  Level: 2.0
  • guides/programming/programmers_reference_manual/zip_format_conversion.txt
  • Last modified: 2024/06/19 20:20
  • by 127.0.0.1