menno Geplaatst: 3 maart 2022 Delen Geplaatst: 3 maart 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 Link naar reactie
Banach Geplaatst: 7 maart 2022 Delen Geplaatst: 7 maart 2022 (aangepast) 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. 😁 7 maart 2022 aangepast door Banach Quote Link naar reactie
Aanbevolen berichten
Doe mee aan dit gesprek
Je kunt dit nu plaatsen en later registreren. Indien je reeds een account hebt, log dan nu in om het bericht te plaatsen met je account.