這篇是對應「C# 絕對路徑轉相對路徑」的程式碼所寫的~
目的就是把轉成相對路徑的位址再轉回成絕對路徑
僅供參考 XD。
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification.
- Bertrand Meyer
Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems.
- Charles Connell
註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
2010年12月29日 星期三
用 OLEDB 讀寫 Excel 檔
其實原本是要直接讀寫 Excel 的,但時間上來不及讓我慢慢找相關資料
只大概知道可以用Microsoft.Office.Interop.Excel 來做
不過簡單測了一下卻出現 Excel 檔案打不開的問題(疑似是安全性問題之類的?)
另外還可以用 NPOI 函式庫,好像網路上蠻多人都用這個方法的。
用 OLEDB 把 Excel 當做小型資料庫來處理的話
主要缺點就是不支援 DELETE,只能 INSERT 和 UPDATE
所以遇到要 DELETE 時只能建新的 EXCEL,把要保留的 DataRow 都寫過去(INSERT)。
2010年12月2日 星期四
C# TextBox 雙擊、Ctrl+A 全選文字
C# 的 TextBox 控制項預設是沒有 Ctrl+A 可以全選的設計
所以只好一切都自己來了!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
public mainForm() { /* 設定雙擊及 Ctrl+A 可全選 TextBox 控制項內的所有文字 */ foreach (Control c in this .groupBox1.Controls) { if (c is TextBox) { c.KeyDown += new KeyEventHandler(allTextBox_KeyDown); c.DoubleClick += new EventHandler(allTextBox_DoubleClick); } } } /* 按下 Ctrl+A 全選文字 */ private void allTextBox_KeyDown( object sender, KeyEventArgs e) { if (e.Modifiers == Keys.Control && e.KeyCode == Keys.A) ((TextBox)sender).SelectAll(); } /* 雙擊全選文字 */ private void allTextBox_DoubleClick( object sender, EventArgs e) { ((TextBox)sender).SelectAll(); } |
2010年11月17日 星期三
ACCESS 不支援 LIMIT 的替代作法
SELECT TOP [pageSize] * FROM (SELECT TOP [pageSize*currentPage + 1] * FROM news WHERE constraint='constraint' ORDER BY id DESC ) ORDER BY id ASC
其中紅色的地方 pageSize 是一頁顯示的筆數、currentPage 是現在要顯示的是第幾頁(假設起始序號是 0)。
2010年11月10日 星期三
2010年8月15日 星期日
PHP 版驗證碼產生器
http://samsharehome.blogspot.com/2008/12/phpgoogle.html
程式的限制是必須支援 PHP5 以及 GD
剛剛測試上傳到 phpnet 的伺服器是可以正常運作的
不過放在我本機的 Appserv 卻產生不出圖片,不知道為什麼Orz...
測試程式碼下載位置:http://sam.wang.0723.googlepages.com/verify.rar
參考圖:
2010年8月11日 星期三
WEKA:由程式產生資料庫 Instances
WEKA API 請參閱官方網站:http://www.cs.waikato.ac.nz/ml/weka/
由於 WEKA 有自己專用的檔案格式 ARFF
但資料在記憶體中做完 preprocessing 以後,還得特地存成 *.arff 檔
再叫 WEKA 的 API 把 *.arff 檔讀進來,顯然是很蠢的事情=..=~
經過一番尋找,總算在官方文件中發現產生 Instances 資料庫的方法了!
2010年8月6日 星期五
WEKA:K-Means 分群演算法
K-Means 分群演算法:
輸入一群資料,以及設定為需要分成 c 群
演算法會先隨便找出 c 個點當作中心點
然後對剩下的每個點都去計算跟這 c 個中心點的距離,來決定要把他們分在哪一群
遞迴是先找出這 c 群中下一個中心點
也就是對每一個點都去計算群內其他點到這個點的距離平方
找出全體的距離平方最短的那個點,就是下一個中心點~
而如果每一群找出來中心點都跟原本一樣,就表示已經找到局部最小值了~
2010年7月25日 星期日
監視 Java 的記憶體使用率
之前轉過一篇用 JConsole 監視記憶體狀況的文章
不過用 JBuilder 2007 Turbo,執行時產生的 process 不知為啥 JConsole 無法監視
後來只好再找別的方法了~
Java VisualVM 也是跟 JConsole 一樣夾在 JDK 裡面的附贈品
目前用的版本是 v1.6.0_21
官方文件可以參考:這裡
安裝 JDK 後就會在 JDK 的 /bin 資料夾內有 jvisualvm.exe 可以執行
執行後在左邊 Local 處會即時偵測有在執行的 Java process
只要在要觀察的 process 上雙擊就可以看他的資訊了~
參考圖:
背景綠色的是因為我的電腦就這樣設定...(茶)
2010年4月23日 星期五
Java distribution function:SSJ 2.2
首頁:http://www.iro.umontreal.ca/~simardr/
線上文件:http://www.iro.umontreal.ca/~simardr/ssj/doc/html/
原始碼(.jar)下載位置:http://www.iro.umontreal.ca/~simardr/ssj/ssj-20091109.zip
匯入 .jar 檔的方法,以 JBuilder 2007 Turbo 為例
只要將檔案貼到 C:\JBuilder2007\jre\jre\lib\ext 後重新啟動 JBuilder 2007 即可。
2010年4月8日 星期四
StringTokenizer 與 split( ) 的差別
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public static void main(String[] args) { String str = "1,2,,3" ; String delimiter = "," ; StringTokenizer tokens = new StringTokenizer(str, delimiter); while (tokens.hasMoreTokens()) { System.out.println(tokens.nextToken()); } System.out.println( "------------------" ); String[] result = str.split(delimiter); for ( int i = 0 ; i < result.length; i++) { System.out.println(result[i]); } } |
輸出結果:
1
2
3
------------------
1
2
3
2010年1月6日 星期三
實做Comparator的方法
如果使用 ArrayList 來儲存自定義的 Object
例如
1 |
ArrayList<node> al = new ArrayList<node>(); |
(<node> 指的是 ArrayList 存放的物件是 node 型態的物件)
這時想用 Collections.Sort(al) 來排序這個 ArrayList 就會出錯
程式會不知道該怎麼執行排序~
此時就必須實做 Comparator 這個 Interface,教 Collections 要怎麼做排序。