2010年12月29日 星期三

C# 相對路徑轉絕對路徑

這篇是對應「C# 絕對路徑轉相對路徑」的程式碼所寫的~
目的就是把轉成相對路徑的位址再轉回成絕對路徑
僅供參考 XD。

用 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年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 資料庫的方法了!

可參閱:Creating an ARFF file

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 要怎麼做排序。