Delen via


Plaats, provincie en postcode parseren in afzonderlijke waarden

Oorspronkelijke productversie: Microsoft Office Access 2003, Microsoft Office Access 2007, Access 2010
Origineel KB-nummer: 168798

Samenvatting

Dit artikel bevat een procedure voor het parseren van één variabele met informatie over de plaats, de staat en de postcode in drie afzonderlijke variabelen. De routine ondersteunt:

  • Een postcode van 5 of 9 cijfers.
  • Statusnamen van meerdere woorden (indien voorafgegaan door een komma).
  • Een willekeurig aantal tussenliggende spaties.

Voorbeelden van ondersteunde invoer:

New York, New York, 99999
New York, NY, 99999-9999
New York, NY 99999-9999
New York NY 99999

Meer informatie

WAARSCHUWING: HET GEBRUIK DOOR U VAN DE CODE/MACRO IN DIT ARTIKEL IS OP EIGEN RISICO. Microsoft biedt deze code/macro 'as is' zonder enige garantie, expliciet of impliciet, met inbegrip van maar niet beperkt tot de impliciete garanties van verkoopbaarheid en/of geschiktheid voor een bepaald doel.

OPMERKING: In de volgende voorbeeldcode wordt een onderstrepingsteken (_) aan het einde van een regel gebruikt als een regelvolgteken. Voor versies van BASIC die geen ondersteuning bieden voor regelvolgtekens, verwijdert u het onderstrepingsteken van het einde van de regel en voegt u samen met de volgende regel wanneer u deze code opnieuw maakt.

Velden worden geparseerd in de volgende volgorde als er geen komma's worden gevonden in het adres: Postcode, Staat, Plaats Als er ten minste één komma aanwezig is, wordt deze verondersteld tussen Plaats en Staat te staan en worden de velden in een andere volgorde geparseerd: Plaats, Staat, Postcode

Stapsgewijs voorbeeld

  1. Voer de volgende code in:

    Function CutLastWord (ByVal S As String, Remainder As String) _
             As String
        ' CutLastWord: returns the last word in S.
        ' Remainder: returns the rest.
        '
        ' Words are separated by spaces
        '
        Dim I           As Integer, P As Integer
        S = Trim$(S)
        P = 1
        For I = Len(S) To 1 Step -1
            If Mid$(S, I, 1) = " " Then
                P = I + 1
                Exit For
            End If
        Next I
        If P = 1 Then
            CutLastWord = S
            Remainder = ""
        Else
            CutLastWord = Mid$(S, P)
            Remainder = Trim$(Left$(S, P - 1))
        End If
    End Function
    
    Sub ParseCSZ (ByVal S As String, City As String, State As String, _
        Zip             As String)
        Dim P           As Integer
        '
        ' Check for comma after city name
        '
        P = InStr(S, ",")
        If P > 0 Then
            City = Trim$(Left$(S, P - 1))
            S = Trim$(Mid$(S, P +        '
            ' Check for comma after state
            '
            P = InStr(S, ",")
            If P > 0 Then
                State = Trim$(Left$(S, P - 1))
                Zip = Trim$(Mid$(S, P + 1))
            Else        ' No comma between state and zip
                Zip = CutLastWord(S, S)
                State = S
            End If
        Else        ' No commas between city, state, or zip
            Zip = CutLastWord(S, S)
            State = CutLastWord(S, S)
            City = S
        End If
        '
        ' Clean up any dangling commas
        '
        If Right$(State, 1) = "," Then
            State = RTrim$(Left$(State, Len(State) - 1))
        End If
        If Right$(City, 1) = "," Then
            City = RTrim$(Left$(City, Len(City) - 1))
        End If
    End Sub
    
  2. Als u wilt testen, maakt u een formulier met vier tekstvakken (txtAddress, txtCity, txtState, txtZip) en een opdrachtknop. Voeg de volgende code toe:

    Sub Command1_Click()
        Dim City        As String, State As String, Zip As String
        ParseCSZ txtAddress, City, State, Zip
        txtCity = City
        txtState = State
        txtZip = Zip
    End Sub
    
  3. Geef het formulier weer, typ een adres in txtAddress en klik op de opdrachtknop. De andere drie velden moeten de geparseerde waarden bevatten.