我希望解析一个字符串并从数据字段中获取状态名称。这是我的问题:在字段中经常有一个逗号和一个城市,所以我需要提取逗号之后的州名。踢球者有时候不是一个城市,有时会有:[
以下是我的想法:无论是否包含城市,它都包含州名。我可以将50个状态放入表中并对字段使用LIKE语句,因此无论是否使用逗号,它都将获取状态名称。如果城市可能是州的名称,或者城市名称的一部分包含州名... hrmmm,则问题就出现了。有人有任何提示吗?
另外,我需要一种方法将城市拉到另一个领域!那个很难,因为我无法拥有所有城市的数据库表来进行比较。
Sample data set:
ANCHORAGE, ALASKA
BLOOMINGTON, MINNESOTA
FLORIDA
HENDERSON, NEVADA
NEW JERSEY
OKLAHOMA CITY, OKLAHOMA
答案 0 :(得分:1)
<强> 1 强>
如果字符串遵循结构,您可以尝试识别它(例如在NLP中)
例
结构1:[城市],[省],[国家],[大陆],[星球]
结构2:[prov],[country]
然后你所要做的就是识别结构。您可以使用元素数量和已识别项目(例如State / Prov)的位置来获取结构。
<强> 2 强>
如果没有结构或需要考虑太多变化,我会使用对项目及其关系的识别
防爆。你可以识别一个状态,你知道如果字符串有一个城市,它就在状态之前。因此,检查状态前是否有字符串,字符串看起来像城市名称,然后保存。
这更有可能返回错误的结果(如果没有结构而且您无法识别城市的名称,那么只能识别一个这样的名称)< / p>
第3 强>
看看你关于格式的最后评论总是&#34; [州]&#34;或者&#34; [城市],[州]&#34;。我可能高估了你的问题。如果格式真的只有那2个,那么就做蒂姆·威廉姆斯建议的那样。
使用分隔符&#34;,&#34;分割字符串 使状态成为split数组中的最后一个元素,如果split数组的大小为2(例如Ubound - Lbound + 1 = 2),则将city作为split数组中的第一个元素
方法3的VBA代码:
Sub test()
s1 = "Alaska"
s2 = "Anchorage, Alaska"
s3 = "Texas"
MsgBox parse(s1) & vbNewLine & parse(s2) & vbNewLine & parse(s3)
End Sub
Function parse(str As Variant) As String
Dim state As String, city As String
Dim splitArr() As String
Dim output As String
splitArr = Split(str, ", ")
length = UBound(splitArr) - LBound(splitArr) + 1
state = splitArr(UBound(splitArr))
output = "State: " & state
If length > 1 Then
city = splitArr(LBound(splitArr))
output = "City: " & city & ", " & output
End If
parse = output
End Function
答案 1 :(得分:1)
如果你有一张国家表,你可以说:
SELECT Address.Address, State.State
FROM State, Address
WHERE Address.Address Like "*" & [State] & "*"
如果你有新泽西州的佛罗里达州,这只会很尴尬。