星期四, 6月 06, 2013

Python 沒有 switch - case

雖然在用 Python,但還是算初學者,一堆指令的用法和細節,都常常要上網找語法來用。這次突然翻到,Python 沒有 switch - case,喔喔喔!!有人整理過各種程式語言的switch - case,想不到連古老的COBOL 85也有類似的語法,更不用講在Python之後的Ruby或Perl了。
我是還沒寫到這麼高階的功能啦,不過看看別人怎麼處理這個問題也好。其實,書上會寫,要用if...elif...elif...else來處理這個問題。但是也有人想直接改別人的c code或php code而不要重寫,所以才會想出這些處理方法。
主要的參考網頁為 azalea saysActiveState Code,其實可以看看ActiveState Code下面的討論串,原來一個簡單的問題,其實有蠻多不同的創意解決方案,而不是教科書上寫的單一教條。

第一個方法是用Dictionary,第二個方法其實也是用Dictionary,再加上lambda。第三個方法就比較貼近我想的,直接寫一個 class來處理,以下的code,是2005年Brian Beck 就寫好的,來自於ActiveState Code,在此宣告他們的版權。

星期三, 6月 05, 2013

[解決] 用 Python來開 Microsoft Access的.mdb資料檔的中文欄位問題

又開始沒事找事做,開始改之前寫好的程式了。

在之前的文章:用 Python來開 Microsoft Access的.mdb資料檔曾經提到
"pyodbc 是个很不错的库,api 也很好用,不过对中文支持的并不好"
我的經驗也是如此。原始資料庫的開發者沒事把欄位名稱用上中文,結果就是我花了好久時間,還是不能用sql語法的where來限制欄位的比對結果。

後來有熱心網友提供了他的心得:用微軟提供的元件 ADODB 來存取 Access。所以我也很快樂的在新版程式中 import這些功能。一個不錯的使用方法及副程式,可以在AlarmChang所維護的Python NoteBook中找到程式碼,基本上直接copy就很好用了。

但是,還是一樣,一但整份.py文件儲存時是使用utf-8,那就完了,一直出現error。
重點是,我突然發現,在
SQL = "Select * from TableABC"
rs = Connect_To_Access(SQL)

這一段,其實是丟一個字串(SQL)給Microsoft ADODB COM去解譯,那我丟的字串符合它要的編碼規定(在我之前的文章有提,就是用ansi儲存的編碼),就可以了吧。
//for syntaxhighlighter 3 //看一下載入的JS模組有哪些,不要的就刪掉 //end syntaxhighlighter 3