Straße und Hausnummer

Normalerweise speichert man Straße und Hausnummer in einem Feld. Was aber, wenn man ausnahmsweise doch einmal die Angaben getrennt benötigt? Zunächst sollte man sich fragen, ob man nicht grundsätzlich gegen die erste Normalform verstoßen hat.

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 Strasse
   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