Compartir a través de


Cómo analizar el código de ciudad, estado y código postal en valores independientes

Versión original del producto: Microsoft Office Access 2003, Microsoft Office Access 2007, Access 2010
Número de KB original: 168798

Resumen

En este artículo se proporciona un procedimiento para analizar una única variable que contiene información de la ciudad de EE. UU., el estado y el código postal en tres variables independientes. La rutina admite:

  • Código postal de 5 o 9 dígitos.
  • Nombres de estado de varias palabras (si van precedidos de una coma).
  • Cualquier número de espacios intermedios.

Ejemplos de entradas admitidas:

Nueva York, Nueva York, 99999
Nueva York, NY, 99999-9999
Nueva York, NY 99999-9999
Nueva York NY 99999

Más información

ADVERTENCIA: CUALQUIER USO POR SU PARTE DEL CÓDIGO O LA MACRO QUE SE PROPORCIONA EN ESTE ARTÍCULO CORRE SU PROPIO RIESGO. Microsoft proporciona este código o macro "tal cual" sin garantía de ningún tipo, ya sea expresa o implícita, incluidas, entre otras, las garantías implícitas de comerciabilidad o idoneidad para un propósito determinado.

NOTA: En el código de ejemplo siguiente, se usa un carácter de subrayado (_) al final de una línea como carácter de continuación de línea. Para las versiones de BASIC que no admiten caracteres de continuación de línea, quite el carácter de subrayado del final de la línea y combine con la siguiente línea al volver a crear este código.

Los campos se analizan en el orden siguiente si no se encuentra ninguna coma en la dirección: Código postal, Estado, Ciudad Si hay al menos una coma, se supone que está entre Ciudad y Estado, y los campos se analizan en un orden diferente: Ciudad, Estado, Código postal

Ejemplo paso a paso

  1. Escriba el código siguiente:

    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. Para probar, cree un formulario con cuatro cuadros de texto (txtAddress, txtCity, txtState, txtZip) y un botón de comando. Agregue el código siguiente:

    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. Muestre el formulario, escriba una dirección en txtAddress y haga clic en el botón de comando. Los otros tres campos deben contener los valores analizados.