* Postcode
d postcode ds qualified
d outcode 4a
d incode 3a
* Procedure prototypes
d SplitPostcode pr likeds(Postcode)
d iPostcode 10 value
**********************************************************************************************
* Split postcode into outcode and (optional) incode
**********************************************************************************************
p SplitPostcode b export
d SplitPostcode pi likeds(Postcode)
d iPostcode 10 value
* Define local variables:
d oPostcode ds likeds(Postcode)
d lLength s 5u 0
d lFirstSpace s 5u 0
d lTrailing s like(iPostcode)
d cUpper c const('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
d cLower c const('abcdefghijklmnopqrstuvwxyz')
* Translate to upper case
c eval iPostcode = %xlate(cLower:cUpper:iPostcode)
* Remove embedded spaces
c dow cForever
c eval lFirstSpace = %scan(' ':iPostcode)
c eval lTrailing = %trim(%subst(iPostcode:
c lFirstSpace:
c %len(iPostcode)
c -lFirstSpace))
c if lTrailing = *blanks
c leave
c endif
c eval iPostcode = %subst(iPostcode:
c 1:
c lFirstSpace-1) +
c lTrailing
c enddo
* Postcode length
c eval lLength = %scan(' ':iPostcode) - 1
* Outcode only
c if lLength <= 4
c eval oPostcode.outcode = iPostcode
c eval oPostcode.incode = *blanks
c else
* Full postcode
c eval oPostcode.outcode = %subst(iPostcode:
c 1:
c lLength-3)
c eval oPostcode.incode = %subst(iPostcode:
c lLength-2:
c 3)
c endif
c return oPostcode
p e
*********************************************************************************************
* Usage example
c eval postcode = SplitPostcode(in.pcd118)
c eval out.pcdo18 = postcode.outcode
c eval out.pcdi18 = postcode.incode