Udostępnij za pośrednictwem


Jak przeanalizować miasto, stan i kod pocztowy na osobne wartości

Oryginalna wersja produktu: Microsoft Office Access 2003, Microsoft Office Access 2007, Access 2010
Oryginalny numer KB: 168798

Podsumowanie

Ten artykuł zawiera procedurę analizowania pojedynczej zmiennej zawierającej informacje o mieście USA, stanie i kodzie pocztowym na trzy oddzielne zmienne. Procedura obsługuje:

  • 5- lub 9-cyfrowy kod pocztowy.
  • Nazwy stanów wielosłownych (jeśli są poprzedzone przecinkiem).
  • Dowolna liczba spacji pośrednich.

Przykłady obsługiwanych danych wejściowych:

Nowy Jork, Nowy Jork, 99999
Nowy Jork, NY, 99999-9999
Nowy Jork, NY 99999-9999
Nowy Jork NY 99999

Więcej informacji

OSTRZEŻENIE: KAŻDE UŻYCIE KODU/MAKRA PODANEGO W TYM ARTYKULE JEST NA WŁASNE RYZYKO. Firma Microsoft udostępnia ten kod/makro "w takim stanie, w jakim jest" bez jakiejkolwiek gwarancji, wyraźnej lub dorozumianej, w tym między innymi do domniemanych gwarancji przydatności handlowej i/lub przydatności do określonego celu.

UWAGA: W poniższym przykładowym kodzie podkreślenie (_) na końcu wiersza jest używane jako znak kontynuacji wiersza. W przypadku wersji PODSTAWOWA, które nie obsługują znaków kontynuacji wiersza, usuń podkreślenie z końca wiersza i scal z następującym wierszem podczas ponownego tworzenia tego kodu.

Pola są analizowane w następującej kolejności, jeśli w adresie nie znaleziono przecinków: Kod pocztowy, Stan, Miasto Jeśli istnieje co najmniej jeden przecinek, przypuszcza się, że znajduje się on między miastem a stanem, a pola są analizowane w innej kolejności: Miasto, Stan, Kod pocztowy

Przykład krok po kroku

  1. Wprowadź następujący 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. Aby przetestować, utwórz formularz z czterema polami tekstowymi (txtAddress, txtCity, txtState, txtZip) i przyciskiem polecenia. Dodaj następujący 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. Wyświetl formularz, wpisz adres w pliku txtAddress i kliknij przycisk polecenia. Pozostałe trzy pola powinny zawierać przeanalizowane wartości.