Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
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
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
Visa formuläret, skriv en adress i txtAddress och klicka på kommandoknappen. De övriga tre fälten ska innehålla de parsade värdena.