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