作者 主題: 挑戰一個高難度的程式功能....歡迎有興趣的網友進來看看!!!  (閱讀 12979 次)

0 會員 與 1 訪客 正在閱讀本文。

swcjason

  • 區域板主
  • 懷疑的國中生
  • *****
  • 文章數: 33
    • 檢視個人資料
    • http://www.sdcs.com.tw
這個程式是這樣的....
拆解全台灣...(先台南縣就好了)所有可能的任何地址...
將原來的住址拆成九段
縣市 || 鄉鎮市 || 村里 || 鄰 || 路、街、段、地方名稱 || 巷 || 弄 || 號 || 號後面
也就是例如
台南縣歸仁鄉大潭村21鄰長榮路2段90巷20弄2號2樓之一
拆解成這樣
台南縣 || 歸仁鄉 || 大潭村 || 21鄰 || 長榮路2段 || 90巷 || 20弄 || 2號 || 2樓之一
唯一可循的規則就是巷弄號的數字一定是大寫數字
排列依序一定是照這樣
縣市 鄉鎮市 村里 鄰 路、街、段、地方名稱 巷 弄 號 號後面
其他的就沒了....
住址的範例檔在這裡 http://jsp.6ri.com.tw/tnstax/ttttt.txt
這文字檔已經包括了台南縣所有可能的地址

拆解過後順序不可換位....例如
原來若是
台南縣麻豆鎮保安里23號
必須是這樣
台南縣 || 麻豆鎮 || 保安里 || || || || || 23號 ||

又若
台南縣麻豆鎮保安里興中路456號1樓
則應該是這樣
台南縣 || 麻豆鎮 || 保安里 || || 興中路 || || || 456號 || 1樓

文字檔最前面的數字再切成另一欄....全部就是這樣

有興趣的人可以將文字檔copy回去候試試看

若是想挑戰全台灣省地址的...則需注意下列幾點
//1.縣市與鄉鎮市分開拆解...鄉鎮市在某些縣市有四個字,例如台東縣太麻里鄉,屏東縣三地門鄉
//2.村里名稱四個字或村里名稱不加"村里",例如台東縣太麻里鄉太麻里村、東沙群島、南沙群島等....
//3.拆解鄉鎮市必須注意名稱與鄉鎮市別為重複字,例如台南縣左鎮鄉、新市鄉,桃園縣平鎮市
//4.某些縣市與鄉鎮市同名,例如宜蘭縣宜蘭市,屏東縣屏東市,台東縣台東市
//5.因字數不同但名稱相同之鄉鎮市判斷錯亂,例如高雄縣內門鄉與屏東縣山地門鄉
//6.特殊路名,例如台北市仰德大道、市民大道

祝大家早日成功

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7311
    • 檢視個人資料
是不是每個分類為一類,
最後要用時合併起來是嗎?

swcjason

  • 區域板主
  • 懷疑的國中生
  • *****
  • 文章數: 33
    • 檢視個人資料
    • http://www.sdcs.com.tw
引述: "duncanlo"
是不是每個分類為一類,
最後要用時合併起來是嗎?


對..大概就是這個意思....
目的就是逐欄塞入資料庫....已備到時候查詢時分欄比對之用...
其中的最前面那一串數字...就是到時候查尋後要的結果

kenny

  • 訪客
我想﹐前面那個檔應該是從某程式輸出的吧﹖

那可以找到那個程式的 front end 嗎﹖當初的設計應該有區隔符號才對~~ 所以﹐直接聯絡原作者﹐調一份資料庫出來或許是最簡單的辦法。但如果不行﹐當我沒說吧。

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7311
    • 檢視個人資料
前面那個數字是不是unikey,
代表每一個唯一的地址...

好像條件定義好後,用迴圈跑就好了...

這個東東好像是選舉時列印名冊用的!

ZMAN

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 6247
  • 性別: 男
    • 檢視個人資料
    • 魔力門部落格
到下列網址找編號0301號問題
不知道有沒有幫助

http://www.vbguide.com.tw/
佈線深似海!
網路高如天!

swcjason

  • 區域板主
  • 懷疑的國中生
  • *****
  • 文章數: 33
    • 檢視個人資料
    • http://www.sdcs.com.tw
喔喔...!!!
真是抱歉!!讓大家有點誤解了....
先回答網中人大哥的疑問....
連結中的文字檔並不是輸出過的檔....是原始的檔案...沒有切開過的
那個文字檔的作者是我自己...當然...前半部分是我自己編的...後半部分是擷取自台南縣政府的真實地址資料

再回答duncanlo的疑問...
unikey這名詞我聽過...但我不知您說的unikey是不是就是房屋稅籍編號...
文字檔中..正是房屋稅籍編號
我就是要用迴圈跑呀....其實我已經寫出來了....只是我寫的過程中覺得有一點技術性...提出來跟大家討論...另一方面也想知道是否有別人有別的想法與做法

再謝謝Nico Liang的建議
我去找過了....不過恕我愚昧....我找不到你所謂的編號0301號問題所指為何...
不過先謝過....我會再去仔細找一次的....

剛剛提到說我已經寫出來了...做好的結果網址在這裡...大家可以看看
http://jsp.6ri.com.tw/tnstax/insertdata2.php

最原始提出這一個主題的用意是因為我接了這個案子...要我一定要這樣拆解
剛開始覺得不太可能...因為所有的地址太多種變化了....
後來還是試試看....花了兩天的時間寫出來....
是想看看能不能得到別的方向與啟示....在此提出與大家討論

ZMAN

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 6247
  • 性別: 男
    • 檢視個人資料
    • 魔力門部落格
以下資料引用自"VB入門網"
用全文檢索找"公用地址"就可以看到這一篇及檔案
再說一次我不知道有沒有幫助


1.前言

市面上所見的商用軟體,幾乎都將地址輸入列為必備的要件,而且是提供五、六年前的地址舊資料庫,而在民國八十九年一月份的 Run PC 雜誌 也是製作一個地址輸入的主題。甚至在多年前的資訊展中,軟體廠商也將地址輸入的便利性當做是廣告宣傳的賣點之一。

其實,地址輸入若以資料處理的觀點來看,只是取出應有的資料而已,難度並不高,但是對於系統分析者而言,難度反而在於如何取得最新且完整的資料,例如縣市名稱、鄉鎮市區名稱、村里名稱、道路名稱等等,假如以人工自行輸入、校對資料,將是一項非常耗費時日的工作。


2.系統分析

實務上對於地址功用有連絡地址及民法上的法定地址,其要求內容是有差異。例如 X 公司的地址為

法定地址:台北市忠孝東路一段 X 號之十一、十二、十三

連絡地址:台北縣三重市重新路二段 X 號

公文書信、發票地址是以法定地址為主,而與其交易過程的物流、金流則是與連絡地址的人員洽辦。為何會如此運作呢?主要是因為企業對於交通、人力、金融服務的方便性考量。在做系統分析時,為適應實務需求,可以演化出各種不同系統需求類型。

考慮因素 作法
在資料欄位設計方面 必須包括法定地址及連絡地址二個欄位。
在列印標籤方面 要有直印及橫印二項功能,則必須考慮將數字全形。
是否顧及法定要求方面 將數字予以國字的一、二、三...十一、十二...表示。
資料庫容量與保密性要求方面 是否將地址資料予以全部數字化,取出或列印時則以程式判斷,降低資料庫容量,國內不少替公司行號大量列印地址標籤,即採用此一方法儲存近百萬份各行各業地址。如台北市市政府位於台北市信義區市府路1號可以 6300 2000 0020 6481 0000 0000 0000 0001 0000 0000 0000 代碼表示。
顧及郵遞區號的驗證方面 郵政總局自推行五碼郵遞區號失敗後,又回歸原來的三碼書寫方式。不管客戶提供或者自行搜尋的地址裡的郵遞區號,可以在輸入時予以驗證,有如營利事業統一編號及國民身份證編號驗證,甚至配合郵遞作業,由原來的三碼,自行根據輸入地址判斷轉換成五碼。
顧及地址英譯方面 將中文地址予以翻譯成英文。
配合地圖資訊系統方面 配合該系統做市場調查分析之用。因為買賣業或不動產業,強調是 Location! Location! Location!,對於現行地址資料能某一定程度配合地圖資訊系統。


3.如何蒐集完整道路資料 (此一步驟非常重要,請按表操課罷!)

為了統合上述的系統分析,作者在搜尋網路資源時,發現交通部郵政總局提供相當完整的道路資料,可以做為範例說明的基本來源。假如你未予以下載並按下列步驟操作,則本主題的程式碼不用下載,以免浪費各位寶貴時間及上網費用、電話費用。

本主題在系統分析之前,先行下載其郵遞區號查詢及應用軟體產生系統(Win95版),並按下列步驟執行安裝及匯入資料至 Access 2000 資料庫。

 1 一次下載完整檔 Allinone.exe (約12M,以 56K 數據機在離峰時段下載差不多要 49 分鐘),請將該檔案下載至您的硬碟裡。檔案下載完畢後,請執行 Allinone.exe 檔,逕行檔案解壓縮,然後執行安裝。
 2 打開 Access 2000;建立新的資料庫;  
 3 執行「檔案」、「取得外部資料」、「匯入」;
 4 出現「匯入畫面」,在「檔案類型」選項選擇「OBDC資料庫」;  
 5 出現「選擇資料來源」畫面,點選「機器資料來源」頁面;在同一畫面,點選「Visaul FoxPro Table」;在同一畫面按「確定」按鈕;  
 6 出現「Configure Connection」畫面,在「Database Type」選項選擇「Free Table Directory」;在同一畫面,「Path」輸入區輸入如「c:\dbf」或「d:\zip32w\dbf」(視你將 allinone.exe 安裝至那一目錄而定);  
 7 出現「匯入物件」畫面,可以選擇「全選」按鈕;  
 8 修改模組 basPath 裡的 gstrDBFile_Test,改為你儲存資料表位置。

Public Function gstrDBFile_Test() As String
    gstrDBFile_Test = "C:\Utility\Dat\utyRoad.mdb"
End Function  

上述會如此做,主要是作者嘗試以 OBDC 方式直接連結至目錄 d:\zip32w\dbf 時,失敗機率非常高,因此偷懶採取熟悉的 Access 資料庫作為資料連結來源。
 

4.畫面設計

 操作畫面一      操作畫面二

本次範例操作畫面則與郵政總局提供的郵遞區號查詢及應用軟體產生系統(Win95版)大部份相同,只增加系統分析需要的技巧,讀者假如是複製本範例在公司加以增添修改自用,請先看一看郵政總局版權聲明,本處只是示範提供有別其以 Visual FoxPro 所設計的技巧。

另外為了說明起見,針對系統分析部份加入下列項目:以郵政總局地址台北市金山南路二段55號為例(來源自交通部郵政總局編印的《臺灣地區郵遞區號薄》(中華民國八十八年八月出版)

 ※ 郵遞區號驗證,系統自動找出郵遞區號為106;
 ※ 英文地址,如自動翻譯成 "No. 55, Sec. 2, Jinshan S. Rd., Taipei, Taiwan, R.O.C.";
 ※ 半形數字,自動轉換全形數字如「台北市金山南路二段55號」;
 ※ 阿拉伯數字轉換中文數字,如「台北市金山南路二段五五號」及「台北市金山南路二段五十五號」;
 ※ 配合《中華民國臺閩地區各市、鎮、鄉、村里代碼(八十四年版)》(行政院主計處編印)及交通部郵政總局的道路編號,示範數位地址。  
   
區分 縣市 鄉鎮 道路 鄰 巷 弄 號 之 樓 之 室
長度 5 5 6 4 4 4 4 4 4 4 4
中文 台北市   金山南路二段       55        
數位 63003 00000 434521 0000 0000 0000 0055 0000 0000 0000 0000

有關主計處所編的代碼規則為省(2)+縣市(3) +鄉鎮(2) +村里(3),在此不予詳細說明。請至正中書局或者三民書局等的『中華民國政府機關出版品』區購買。有書面及光碟二種格式。

假如公司有地下樓則以9字為開頭,如地下二樓為 9002,地上二樓則 0002。至於公司行號標示某某大樓或者前棟後棟者,由於較為特殊,本範例暫不予以處理。
 

5.後記

由於本程式較為複雜,仍有許多小地方無法涵蓋,如尋找特殊地址、某某大樓、前棟後棟者等則未予處理,另外有關錯誤處理部份,因時間所囿,未予以補充,讀者有發現錯誤者,可以至 VB入門網訪客留言板,留下你(妳)的意見或者程式碼,本人將予以修改,放至個個擊破處。

各地道路的開拓而建立新的道路名稱,或者因其他理由更改鄉鎮名稱、村里名稱或道路名稱,都會造成參考資料庫的不足,記得還是要定期更新。

假如下載後,自行修改者,請自行至郵局免費索取《臺灣地區郵遞區號薄》,了解其說明再對照程式碼。你可能改用 DataList or DataCombo 物料替代範例之 List Object,以前者來寫程式碼較為精簡。另外你要深入了解下載的資料表格式及內容,不要企圖去修改資料表內容 (如null值以SQL指令全部填入0 或 " "),以契合你的程式,而是牽就於它,好處是下次下載新的資料時,不用重新對資料表內容加以修改。如下列尋找郵遞區號程式碼,即是牽就於資料表內容,將依縣市名稱及道路名稱條件所找到的記錄,放入於陣列,再行比對陣列裡巷弄號等條件,取出郵遞區號,而不是利用 SQL 指令更改內容或者利用 SQL 指令找尋資料。

'------------------------------------------------
' 2.取得相關資料,置於陣列。
'   至於五碼郵遞區號,則在astrSQL(1),astrSQL(2)將
'   "... FROM ZIP3 ..." 改為 "... FROM RALL1...",
'   不過其例外情形很多,本程序可能無法完全辦到。
'------------------------------------------------
astrSQL(2) = "SELECT ZIPCODE,EVEN,CMP_LABLE,LANE," _
       & "ALLEY,NO_BGN,NO_END FROM ZIP3" _
       & " WHERE CITY = " & Chr(39) & strParam_City & Chr(39) _
       & " AND ROAD = " & Chr(39) & strParam_Road & Chr(39)
       
Set objRec = New ADODB.Recordset
objRec.Open astrSQL(2), mobjConn, adOpenDynamic, adLockReadOnly

For i = 1 To intCnt
    vntData(i, 1) = objRec!ZIPCODE            ' 郵遞區號
    vntData(i, 2) = objRec!EVEN                  ' 單雙數
    vntData(i, 3) = objRec!CMP_LABLE       ' 編號
    vntData(i, 4) = objRec!LANE                  ' 巷
    vntData(i, 5) = objRec!ALLEY                ' 弄
   
    Select Case vntData(i, 3)
        Case 1
            vntData(i, 6) = 1                             ' 開始編號
            vntData(i, 7) = 9999                       ' 結束編號
        Case 2
            vntData(i, 6) = 2                             ' 開始編號
            vntData(i, 7) = 9998                       ' 結束編號
        Case Else
            vntData(i, 6) = objRec!NO_BGN    ' 開始編號
            vntData(i, 7) = objRec!NO_END    ' 結束編號
    End Select
   
    ' 可以看到查詢的結果
    Debug.Print vntData(i, 1), vntData(i, 2), vntData(i, 3), vntData(i, 4), _
                vntData(i, 5), vntData(i, 6), vntData(i, 7)
    objRec.MoveNext
Next
6.程式下載

假如未下載郵遞區號查詢及應用軟體產生系統(Win95版)並按上列「3.如何蒐集完整道路資料」步驟操作,則本主題的程式碼不要下載,以免浪費各位寶貴時間及上網及電話費用。
佈線深似海!
網路高如天!