String opdelen
Hee allemaal,
Ik zit met een moeilijke kwestie.
In een database staan adressen in 1 veld. Dus bijvoorbeeld teststraat 10 bis.
Nu wil ik dit gaan onderverdelen in drie kolommen:
straat, huisnummer en toevoeging.
Heeft iemand enig idee hoe ik de bestaande string kan exploden zodat ik deze drie delen apart op kan slaan in de database?
Toevoeging op 21/04/2012 13:00:48:
Ik heb dit al gevonden:
Dit geeft als output:
straat
282
Bis
Hier mis ik dus het eerste deel van de string
Ik zit met een moeilijke kwestie.
In een database staan adressen in 1 veld. Dus bijvoorbeeld teststraat 10 bis.
Nu wil ik dit gaan onderverdelen in drie kolommen:
straat, huisnummer en toevoeging.
Heeft iemand enig idee hoe ik de bestaande string kan exploden zodat ik deze drie delen apart op kan slaan in de database?
Toevoeging op 21/04/2012 13:00:48:
Ik heb dit al gevonden:
Code (php)
Dit geeft als output:
straat
282
Bis
Hier mis ik dus het eerste deel van de string
Gewijzigd op 21/04/2012 13:01:18 door Rolf -
Maar dan zit ik nog steeds met het probleem als een straat uit twee delen bestaat. Zoals hier met teststraat.
Of zie ik het nou verkeerd?
Ik wil dit namelijk automatisch uit laten voeren op best veel adressen ;)
Of zie ik het nou verkeerd?
Ik wil dit namelijk automatisch uit laten voeren op best veel adressen ;)
Eigenlijk heb je zelf al gezegd wat je moet doen. Je moet de string exploden en PHP heeft hier een handige functie voor.
http://nl3.php.net/explode
Daarmee moet het zeker lukken.
http://nl3.php.net/explode
Daarmee moet het zeker lukken.
Nee daar lukt het niet mee.
Als ik deze strings heb:
$a = Test straat 10 a;
$b = Test 10;
En als ik deze ga exploden krijg ik verschillende explodes:
Bij $a is explode[0] = test, explode[1] = straat, explode[2] = 10 en explode[3] = a.
Bij $b is explode[0] = Test, explode[1] = 10.
Met deze data kan ik dus he-le-maal niets. Via een loop kan ik deze data nooit controleren.
Als ik deze strings heb:
$a = Test straat 10 a;
$b = Test 10;
En als ik deze ga exploden krijg ik verschillende explodes:
Bij $a is explode[0] = test, explode[1] = straat, explode[2] = 10 en explode[3] = a.
Bij $b is explode[0] = Test, explode[1] = 10.
Met deze data kan ik dus he-le-maal niets. Via een loop kan ik deze data nooit controleren.
Gewijzigd op 21/04/2012 13:14:44 door Rolf -
Ben heel benieuwd; straatnamen zijn heel divers
Straatnaam
Stationsweg
van Vlietstraat
Joost van de Vondellaan
Straatnaam
Stationsweg
van Vlietstraat
Joost van de Vondellaan
Er is geen eenduidige manier om deze strings op te splitsen naar de gewenste delen.
100% score behaal je alleen als je het handmatig doet
50+% score kan je behalen door je data te analiseren en de best mogelijke split daarop toe te passen. 50+% zal je dan alsnog met het handje moeten doen.
100% score behaal je alleen als je het handmatig doet
50+% score kan je behalen door je data te analiseren en de best mogelijke split daarop toe te passen. 50+% zal je dan alsnog met het handje moeten doen.
En die 50 % haal ik door middel van ;)?
Rolf - op 21/04/2012 13:23:33:
En die 50 % haal ik door middel van ;)?
Daar kan geen antwoord opgegeven worden, dat is geheel afhankelijk wat je aan 50% data pattern te verwerken hebt.
Ik wil de string opknippen in straat (ook als de straat uit 2 delen bestaat dus b.v. van Vlietstraat), huisnummer en evenuteel toevoegin. Toevoeging is niet zo heel belangrijk omdat dit ook met de hand nagelopen kan worden.
Heb al veel geprobeerd, maar het lukt me maar niet...
Heb al veel geprobeerd, maar het lukt me maar niet...
En als je deze gebruikt:
Dat werkt! Bedankt!
Ik ben helemaal niet thuis in de preg_match materie ;)
Bedankt!
Toevoeging op 21/04/2012 14:13:47:
Nog 1 vraag trouwens:
Soms hebben mensen ingevuld 51A.
Dus met de toevoeging aan het huisnummer vast.
Hier wordt dan niet op gematched. Is daar ook nog een toevoeging voor?
Ik ben helemaal niet thuis in de preg_match materie ;)
Bedankt!
Toevoeging op 21/04/2012 14:13:47:
Nog 1 vraag trouwens:
Soms hebben mensen ingevuld 51A.
Dus met de toevoeging aan het huisnummer vast.
Hier wordt dan niet op gematched. Is daar ook nog een toevoeging voor?
Ik ben er ook niet zo goed in, maar probeer dit dan eens:
Code (php)
1
2
3
2
3
<?php
preg_match('/(?<name>.*?) (?P<digit>\d+\w*) (?P<name2>\w+)/', $tekst, $matches);
?>
preg_match('/(?<name>.*?) (?P<digit>\d+\w*) (?P<name2>\w+)/', $tekst, $matches);
?>
Nee dat pakt hij helaas niet..
En zo:
Toevoeging op 21/04/2012 14:53:54:
Zo, ik heb een nieuwe gemaakt. Deze lijkt te werken:
Code (php)
1
2
3
2
3
<?php
preg_match('/(?<name>.*?) (?P<digit>(\d+\w*)) (?P<name2>\w+)/', $tekst, $matches);
?>
preg_match('/(?<name>.*?) (?P<digit>(\d+\w*)) (?P<name2>\w+)/', $tekst, $matches);
?>
Toevoeging op 21/04/2012 14:53:54:
Zo, ik heb een nieuwe gemaakt. Deze lijkt te werken:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$street = 'test straat 282 Bis';
preg_match('#(?P<street>[^\d]+)(?P<number>\d+.*)#', $street, $matches);
$street = trim($matches['street']);
$number = trim($matches['number']);
echo 'De straat is ' . $street . ' en het nummer is ' . $number . '.';
?>
$street = 'test straat 282 Bis';
preg_match('#(?P<street>[^\d]+)(?P<number>\d+.*)#', $street, $matches);
$street = trim($matches['street']);
$number = trim($matches['number']);
echo 'De straat is ' . $street . ' en het nummer is ' . $number . '.';
?>
De aangeleverde versie van Ozzie werkt inderdaad.
Ik wou de versie van mij plaatsen maar die is in C# :)
Ik wou de versie van mij plaatsen maar die is in C# :)
Werkt dit dan ook:
2e Balsemienstraat 12, Rotterdam
Plein 1940-45 3, Middelburg (zie google-maps)
12e Septemberlaan 2, Noorbeek
Dus let even op hoe de syntax van adressen is!
Vooral die van Plein 1940-45 kan leuk zijn!
2e Balsemienstraat 12, Rotterdam
Plein 1940-45 3, Middelburg (zie google-maps)
12e Septemberlaan 2, Noorbeek
Dus let even op hoe de syntax van adressen is!
Vooral die van Plein 1940-45 kan leuk zijn!
Eddy, grappig... als er een getal in de straatnaam zit wordt het inderdaad tricky. Maar het gaat hier helemaal in het begin al fout. Ik citeer de topicstarter: "In een database staan adressen in 1 veld". Daar gaat het fout. Er moet natuurlijk een apart veld voor de straat, het nummer en eventueel een toevoeging zijn. 3 Velden dus.
Ozzie PHP op 22/04/2012 18:09:48:
Er moet natuurlijk een apart veld voor de straat, het nummer en eventueel een toevoeging zijn. 3 Velden dus.
Enige juiste antwoord zo te zien.
Uhm, is dat niet precies wat de TS nu juist van plan is?
Quote:
In een database staan adressen in 1 veld. Dus bijvoorbeeld teststraat 10 bis.
Nu wil ik dit gaan onderverdelen in drie kolommen:
straat, huisnummer en toevoeging.
Nu wil ik dit gaan onderverdelen in drie kolommen:
straat, huisnummer en toevoeging.
Ja, maar gaat dat dan ook wel weer de database in?




