Afficher en anglais

Partage via


Comment analyser la ville, l’état et le code postal dans des valeurs distinctes

Version d’origine du produit : Microsoft Office Access 2003, Microsoft Office Access 2007, Access 2010
Numéro de la base de connaissances d’origine : 168798

Résumé

Cet article fournit une procédure d’analyse d’une variable unique contenant des informations sur la ville, l’état et le code postal des États-Unis en trois variables distinctes. La routine prend en charge :

  • Code postal à 5 ou 9 chiffres.
  • Noms d’état à plusieurs mots (s’ils sont précédés d’une virgule).
  • Un nombre quelconque d’espaces intermédiaires.

Exemples d’entrées prises en charge :

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

Informations supplémentaires

AVERTISSEMENT : TOUTE UTILISATION PAR VOUS DU CODE/MACRO FOURNI DANS CET ARTICLE EST À VOS PROPRES RISQUES. Microsoft fournit ce code/macro « tel quel » sans garantie d’aucune sorte, expresse ou implicite, y compris, mais sans s’y limiter, les garanties implicites de qualité marchande et/ou d’adéquation à un usage particulier.

REMARQUE : Dans l’exemple de code suivant, un trait de soulignement (_) à la fin d’une ligne est utilisé comme caractère de continuation de ligne. Pour les versions de BASIC qui ne prennent pas en charge les caractères de continuation de ligne, supprimez le trait de soulignement à la fin de la ligne et fusionnez avec la ligne suivante lors de la recréation de ce code.

Les champs sont analysés dans l’ordre suivant si aucune virgule n’est trouvée dans l’adresse : Code postal, État, Ville Si au moins une virgule est présente, il est présumé être entre ville et état, et les champs sont analysés dans un ordre différent : Ville, État, Code postal

Exemple pas à pas

  1. Entrez le code suivant :

    VB
    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. Pour tester, créez un formulaire avec quatre zones de texte (txtAddress, txtCity, txtState, txtZip) et un bouton de commande. Ajoutez le code suivant :

    VB
    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. Affichez le formulaire, tapez une adresse dans txtAddress, puis cliquez sur le bouton de commande. Les trois autres champs doivent contenir les valeurs analysées.