menno Posted March 3, 2022 Posted March 3, 2022 Als je pakketten wil aanmelden voor verzending bij PostNL via hun API's dan moeten deze gegevens gescheiden worden aangeverd. Heel vaak staat alles echter in één veld en veel webshops leveren het ook in één veld aan. Het afgelopen weekeinde had ik weer zo'n geval en toen heb ik daar een CF gebakken, die in de meeste gevallen een correct resultaat levert. Alleen wanneer de straat eindigt op een jaartal, wordt het lastig. (Een adres zoals: plein 1940-1945 heb ik hierin opgelost, maar andere gelijksoortige straatnamen denk ik niet) /* ################################################################## # # AdresSplitsen custom-function # Format: AdresSplitsen ( StraatHuisnrToev ) # # Parameters: # StraatHuisnrToev: Straat, huisnummer en toevoeging in één # # Data returned: # JSON met 3 objecten: street, housenr, addition # # Description: # Voor het aanmelden van zendingen bij Postnl via hun API moet van alle adressen # de adresregel worden geplitst in de 3 velden street, housenr en addition. # Tussen de straatnaam en het huisnummer moet een spatie staan, de toevoeging # mag aan het huisnummer vast zitten. # De functie werkt matig bij straatnamen die eindigen op een jaartal. # # Author: # Menno van Beek # # 20220226 Initial version # # ©2022 - FileMakerTips.nl # ################################################################## */ Let ( [ aList = Substitute ( TrimAll ( Substitute ( StraatHuisnrToev ; [ "-" ; " " ] ; [ "/" ; " " ] ) ; 1 ; 1 ) ; [ " " ; ¶ ] ) ; n = ValueCount ( aList ) ; i = If ( n > 2 ; n - 2 ; 1 ) ; a = Trim ( Substitute ( LeftValues ( aList ; i ) ; [ ¶ ; " " ] ) ) ; b = GetValue ( aList ; i + 1 ) ; c = GetValue ( aList ; i + 2 ) ; bn = Filter ( b ; "1234567890" ) ; cn = Filter ( c ; "1234567890" ) ; nn = Case ( Exact ( b ; bn ) and not ( b = 1945 and PatternCount ( a ; 1940 ) ) ; 1 ; 0 ) ; nr = Case ( nn ; b ; Filter ( If ( n > 2 ; c ; b ) ; "1234567890" ) ) ; ex = If ( Length ( nr ) ; Case ( nn ; c ; Substitute ( If ( n > 2 ; c ; b ) ; nr ; "" ) ) ) ; st = If ( IsEmpty ( nr ) ; StraatHuisnrToev ; Trim ( Left ( StraatHuisnrToev ; Position ( StraatHuisnrToev ; " " & nr ; Length ( nr & ex ) + 2 ; 1 ) ) ) ) ; nr2 = Case ( IsEmpty ( st ) ; ex ) ; nr = Case ( IsEmpty ( nr2 ) ; nr ; Filter ( nr2 ; "1234567890" ) ) ; ex = Case ( IsEmpty ( nr2 ) ; ex ; Substitute ( nr2 ; nr ; "" ) ) ; st = Case ( IsEmpty ( nr2 ) ; st ; Trim ( Left ( StraatHuisnrToev ; Position ( StraatHuisnrToev ; " " & nr ; Length ( nr & ex ) + 2 ; 1 ) ) ) ) ; result = JSONSetElement ( "" ; [ "street" ; st ; JSONString ] ; [ "housenr" ; nr ; JSONString ] ; [ "addition" ; ex ; JSONString ] ) ] ; result ) Quote
Banach Posted March 7, 2022 Posted March 7, 2022 (edited) Met enige regelmaat krijg je met dit probleem te maken, niet alleen bij de PostNL API's. Dus fijn dat jij deze CF met ons deelt. Bij PostNL is mijn ervaring trouwens dat je de huisnummertoevoeging gewoon leeg kunt laten en aan het huisnummer vast kunt laten zitten. Belgische adressen zijn weer een tikkie lastiger vanwege de gewoonte van de Walen om het huisnummer vooraan te zetten. En zo wordt in Luxemburg met regelmaat geen huisnummer vermeld. Een streepje voldoet dan voor de API en het pakketje komtook dan eigenlijk altijd wel aan. 😁 Edited March 7, 2022 by Banach Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.