Dela via


Parsa stad, delstat och postnummer i 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 parsa en enskild variabel som innehåller information om USA:s stad, delstat och postnummer i tre separata variabler. Rutinen stöder:

  • Antingen 5- eller 9-siffrigt postnummer.
  • Tillståndsnamn med flera ord (om de föregås av ett kommatecken).
  • Valfritt antal 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 ANGES I DEN HÄR ARTIKELN ÄR PÅ EGEN RISK. Microsoft tillhandahåller den här koden/makrot "som det är" utan garanti av något slag, antingen uttrycklig eller underförstådd, 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 radfortsättningstecken. För versioner av BASIC som inte stöder radfortsättningstecken tar du bort understrecket från slutet av raden och sammanfogar med följande rad när du återskapar den här koden.

Fälten parsas i följande ordning om inga kommatecken hittas i adressen: Postnummer, Delstat, Stad Om det finns minst ett kommatecken antas det vara mellan stad och delstat och fälten parsas i en annan ordning: Stad, 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 txtAddress och klicka på kommandoknappen. De övriga tre fälten ska innehålla de parsade värdena.