* 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