Normalerweise speichert man Straße und Hausnummer in einem Feld. Was aber, wenn man ausnahmsweise doch einmal die Angaben getrennt benötigt? Natürlich muss man sich dann auch fragen, ob man nicht grundsätzlich gegen die erste Normalform verstoßen hat und diese Angaben von vornherein in zwei Feldern hätte speichern sollen.
Die Funktionen HsNr()
und StrName()
geben die
Hausnummer bzw. den Straßennamen zurück. Sie kommen mit der Mannheimer Bezeichnung
„L 10 9“ genauso klar wie mit „Aachener Str. 1a-c“ oder
„Gartenstraße 1 1/2“. Je nachdem, was die Anwendung leisten soll und wie
(un)einheitlich die Ausgangsdaten sind, gibt es aber auch andere Lösungen dieses
Problems. So sind die so erzeugten Teilstrings z. B. nur bedingt als
Sortierkriterium geeignet.
Function HsNr(strStrasse As String) As String Dim i As Integer Dim intLaenge As Integer, x As String * 1 Dim strErgebnis As String Dim blnBruch As Boolean intLaenge = Len(strStrasse) For i = intLaenge To 1 Step -1 'Gehe von rechts nach links durch strStrasse x = Mid(strStrasse, i, 1) 'aktuell zu prüfendes Zeichen Select Case x Case "/" blnBruch = True Case " " 'Leerzeichen gefunden? If blnBruch Then ' wurde in der Hausnr zuvor ein Bruchstrich gefunden? blnBruch = False Else ' wenn nicht, hier enden strErgebnis = Right(strStrasse, intLaenge - i) Exit For End If End Select Next HsNr = strErgebnis End Function
Function StrName(strStrasse As String) As String Dim i As Integer Dim intLaenge As Integer, x As String * 1 Dim strErgebnis As String Dim blnBruch As Boolean intLaenge = Len(strStrasse) For i = intLaenge To 1 Step -1 x = Mid(strStrasse, i, 1) If x = "/" Then blnBruch = True End If If x = " " Then If blnBruch Then blnBruch = False Else strErgebnis = Left(strStrasse, i - 1) Exit For End If End If Next If Len(strErgebnis) Then StrName = strErgebnis Else StrName = strStrasse End If End Function