Ga naar inhoud

Straatadres splitsen in straatnaam, huisnummer en toevoeging


menno

Aanbevolen berichten

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

)

 

Link naar reactie

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. 😁

aangepast door Banach
Link naar reactie

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.

Gast
Antwoord op deze discussie...

×   Geplakt als verrijkte tekst.   Plak in plaats daarvan als platte tekst

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...