http://specterglobe.myweb.hinet.net/zip32_9405.rar
郵遞區號 縣市 市區 路段 範圍
10079 台北市 中正區 三元街 單全
10068 台北市 中正區 大埔街 單 17號以上
10051 台北市 中正區 中山南路 單 3號以下
上面是從『中華郵政全球資訊網』下載的5碼郵遞區號查詢表(Excel格式)
設計一程式,Text1輸入地址後,秀出查出的5碼郵遞區號...
當然...秀出的答案越少越精準是這個題目的難點!
另外要克服的,如:數字全、半形、中文數字等轉換問題...
原始資料格式不限,要轉換成Mdb資料庫檔、Txt純文字檔均可!
2006-08-03 19:13:00 · 7 個解答 · 發問者 幽靈 5 in 電腦與網際網路 ➔ 程式設計
johnber大呀,我是不太懂轉成unicode是如何 ?
但依題意,在比對資料時...
原始資料的輸入是沒有限定規則的哦~如
15號
15號
十五號
一五號
一十五號
二百○四號
二百零四號
二0四號
當然這是次要的啦!!我也在稍早前把這個問題解決了(感謝月島大提供思考方向)
剩下的判別及分析「範圍」欄位,才是小弟能力所不及的...
希望高手指引方向...
2006-08-06 21:01:33 · update #1
這個程式並非最好,因為只判斷縣市(全部比對)、市區(全部比對)、路段(部份比對)、範圍(未做比對),而且此程式是直接讀取 Excel 檔,所以在速度方面並非很理想。在表單中佈置三個元件:Address(TextBox), Search(CommandButton), List(ListBox),程式碼如下:Option ExplicitPrivate Sub List_Click() Address.Text = List.TextEnd SubPrivate Sub Search_Click() Dim myConn As Connection Dim myRs As Recordset Dim i As Integer Dim myStr As String Dim secation As Integer Dim mySQL As String On Error Resume Next List.Clear DoEvents Set myConn = New Connection Set myRs = New Recordset myConn.CursorLocation = adUseClient myConn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0; Data Source=I:\zip32_9405.xls; Extended Properties=Excel 8.0;" For secation = 5 To 2 Step -1 mySQL = "Select * From [Sheet1$] Where Instr('" + Address.Text + "', 縣市) > 0 And Instr('" + Address.Text + "', Mid(路段, 1, " & secation & ")) > 0" If InStr(Address.Text, "新竹市") = 0 And InStr(Address.Text, "嘉義市") = 0 Then mySQL = mySQL + " And Instr('" + Address.Text + "', 市區) > 0" End If myRs.Open mySQL, myConn, adOpenStatic, adLockOptimistic If Err.Number = 0 Then While Not myRs.EOF myStr = "" For i = 0 To myRs.Fields.Count - 1 myStr = myStr & myRs.Fields(i) & " " Next List.AddItem myStr myRs.MoveNext Wend End If myRs.Close If List.ListCount > 0 Then Exit For Next myConn.Close If List.ListCount = 0 Then List.AddItem "查無資料"End Sub
2006-08-14 11:54:34 補充:
專案>設定引用項目>將 Microsoft ActiveX Data Objects 2.0 Library 勾選即可。
2006-08-12 09:09:29 · answer #1 · answered by 世賢 7 · 0⤊ 0⤋
Private Sub Form_Load()
Dim i As String
Dim a(2) As String
Dim e(2) As String
e(0) = "10079"
e(1) = "10068"
e(2) = "10051"
a(0) = "台北市 中正區 三元街 單全"
a(1) = "台北市 中正區 大埔街 單 17號以上"
a(2) = "台北市 中正區 中山南路 單 3號以下"
i = InputBox("地址?")
Dim w As Byte
For w = 0 To 2
If i = a(w) Then
MsgBox e(w)
Exit Sub
End If
Next w
MsgBox "無資料"
End Sub
2006-08-06 16:26:28 · answer #2 · answered by x32768 5 · 0⤊ 0⤋
我曾在 Delphi 做過, 方法是先將地址字串轉為 unicode(在 Delphi 是 WideString), 然後再與郵局資料庫依序比對-縣市,鄉鎮區,路名,到此都簡單.
2006-08-05 16:34:19 補充:
重點在路之後,郵局資料庫有幾個規則,如全,單,雙...全找出來,然後逐字比對 巷,弄,門牌,落在哪個區間;轉成 unicode 目的在於將所有字轉為相同字元長度,就不用判斷其為全形或半形了,不過我不知VB有無 unicode 型別...
2006-08-05 12:29:17 · answer #3 · answered by 疼目職人 2 · 0⤊ 0⤋
挺有意思的題目,在沒有限制使用者輸入方式的條件下去查詢資料..嗯!很有挑戰性,我也來想想XD,..月大我浮出來了!!
2006-08-04 10:33:38 · answer #4 · answered by W.J.S. 7 · 0⤊ 0⤋
不是出考題啦! XD 算討論題吧...
小的目前雖然有幾種想法,但還是想聽聽各位大大的意見...
5碼郵遞區號表,上面有貼連結呀!可直接下載...
http://specterglobe.myweb.hinet.net/zip32_9405.rar
或者到中華郵政全球資訊網也載得到!
http://www.post.gov.tw/post/internet/down/index.jsp?ID=190108
2006-08-04 08:28:40 · answer #5 · answered by 幽靈 5 · 0⤊ 0⤋
看起來好像是挑戰知識+vb版出沒者的題目嗎??
蠻有趣的題目~~
寫難一點 應該會扯到模糊和類神經
寫簡單一點的話....就是依照它的規律
寫出一系列的判斷法去區別開符合資料
我也來想一下作法好了XD
題外話.....
5碼郵遞區號查詢表 <~這東西哪邊找得到...沒有實體檔沒辦法作判斷啊XD
2006-08-04 07:30:18 · answer #6 · answered by ? 5 · 0⤊ 0⤋
這是... 出考題嗎?
2006-08-04 06:17:20 · answer #7 · answered by 樂財 5 · 0⤊ 0⤋