這篇是對應「C# 絕對路徑轉相對路徑」的程式碼所寫的~
目的就是把轉成相對路徑的位址再轉回成絕對路徑
僅供參考 XD。
Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification. Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. 註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
- Bertrand Meyer
- Charles Connell
註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 可以全選的設計
所以只好一切都自己來了!
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( ) 的差別
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
例如
ArrayList<node> al = new ArrayList<node>();
(<node> 指的是 ArrayList 存放的物件是 node 型態的物件)
這時想用 Collections.Sort(al) 來排序這個 ArrayList 就會出錯
程式會不知道該怎麼執行排序~
此時就必須實做 Comparator 這個 Interface,教 Collections 要怎麼做排序。