Så här parsar du ort, delstat och postnummer till separata värden

Ursprunglig produktversion:   Microsoft Office Access 2003, Microsoft Office Access 2007, Access 2010
Ursprungligt KB-nummer:   168798

Sammanfattning

Den här artikeln innehåller en procedur för att tolka en variabel som innehåller information om stad, delstat och postnummer i tre separata variabler. Rutinen stöder:

  • Antingen 5- eller 9-siffrigt postnummer.
  • Flerordstillståndsnamn (om ett kommatecken föregås av ett kommatecken).
  • Val av mellanliggande blanksteg.

Exempel på indata som stöds:

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

Mer information

VARNING! ALL ANVÄNDNING AV KODEN/MAKROT SOM FINNS I DEN HÄR ARTIKELN ÄR PÅ EGEN RISK. Microsoft tillhandahåller denna kod/detta makro "i dess form" utan några som helst garantier, vare sig uttryckliga eller underförstådda, inklusive men inte begränsat till underförstådda garantier om säljbarhet och/eller lämplighet för ett visst ändamål.

Obs! I följande exempelkod används ett understreck (_) i slutet av en rad som ett rad fortsättningstecken. För versioner av BASIC som inte har stöd för rad fortsättningstecken tar du bort understrecket från slutet av raden och sammanfogar det med följande rad när du återskapar den här koden.

Fälten analyseras i följande ordning om inga kommatecken finns i adressen: Postnummer, Delstat, Ort Om det finns minst ett kommatecken antas det vara mellan Ort och Delstat och fälten analyseras i en annan ordning: Ort, Delstat, Postnummer

Steg för steg-exempel

  1. Ange följande kod:

    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. Testa genom att skapa ett formulär med fyra textrutor (txtAddress, txtCity, txtState, txtZip) och en kommandoknapp. Lägg till följande kod:

    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. Visa formuläret, skriv en adress i txtAdress och klicka på kommandoknappen. De andra tre fälten ska innehålla tolkade värden.