2009年11月20日 星期五

[C#] OCR 文字判讀

感覺準確度不高阿。。真是頭痛 ><" using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Drawing.Imaging; namespace _20091117_OCR_TEST { public partial class Form1 : Form { // 宣告 OpenFileDialog 控制項,並且實例化 OpenFileDialog OFD = new OpenFileDialog(); public Form1() { InitializeComponent(); this.Text = ""; } //OCR 辨識文字 private string Recognition(string strFileName) { string strResult = string.Empty; // 宣告 MODI.Document 物件 modiDocument,並且實例化 MODI.Document modiDocument = new MODI.Document(); // MODI.Document 創建 modiDocument.Create(strFileName); // 宣告 MODI.Image 物件 modiImage,其內容值來自 MODI.Document 物件 modiDocument MODI.Image modiImage = (MODI.Image)modiDocument.Images[0]; // OCR Method(Language, WithAutoRotation, WithStraightenImage) modiImage.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false); // 組合 OCR 辨識後的 Word foreach (MODI.Word WordItem in modiImage.Layout.Words) { strResult += WordItem.Text + " "; } modiDocument.Close(false); // 回傳辨識結果 return strResult; } //當按下 PICTURE 時 private void pictureBox1_Click_1(object sender, EventArgs e) { CALL_LOAD_PICTURE(); } //讀取 圖片並顯示出來(原始圖檔) private void CALL_LOAD_PICTURE() { this.Text = ""; pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; // 加入檔案過濾條件 OFD.Filter = "*.jpg;*.png;*.bmp|*.jpg;*.png;*.bmp"; if (OFD.ShowDialog() == DialogResult.OK) { // 讓 pictureBox1.Image 為選擇的圖檔 this.pictureBox1.Image = Image.FromFile(OFD.FileName); // 顯示辨識結果 string aa = Recognition(OFD.FileName).ToString().Replace(" ", "").Replace("-", "").Replace(".", ""); int cc = aa.IndexOf("FT"); this.Text = "判讀結果:" + aa.Substring(cc).ToString(); } } private void 轉換灰階並再次判讀ToolStripMenuItem_Click(object sender, EventArgs e) { if (OFD.FileName.Length > 1)
{
try
{
//並宣告bm1為Bitmap
Bitmap bm1 = (Bitmap)pictureBox1.Image;
//宣告寬及高
int w1 = pictureBox1.Image.Width;
int h1 = pictureBox1.Image.Height;
int x;
int y;
//掃影像每一個pixel並做處理
for (y = 0; y <= h1 - 1; y++)
{
for (x = 0; x <= w1 - 1; x++)
{
Color c1 = bm1.GetPixel(x, y);
int r1 = c1.R;
int g1 = c1.G;
int b1 = c1.B;
int avg1 = (r1 + g1 + b1) / 4;
bm1.SetPixel(x, y, Color.FromArgb(avg1, avg1, avg1));
}
}
//處理完後放回pictureBox1
pictureBox1.Image = bm1;

//存圖片
string buff_path = Application.ExecutablePath.ToString() + "-buff.bmp";
pictureBox1.Image.Save(Application.ExecutablePath + "-buff.bmp");

// 顯示辨識結果
string aa = Recognition(buff_path).ToString().Replace(" ", "").Replace("-", "").Replace(".", "");
int cc = aa.IndexOf("FT");
this.Text = "灰階 判讀結果:" + aa.Substring(cc).ToString();
}

catch (Exception ex)
{
// MessageBox.Show(ex.Message);
}
}
}
}
}

2009年8月23日 星期日

[Other]無題..

在 demo 小鋪 大大那裡看到一段話 覺得很有道理

if (me.today == me.yesterday) me.tomorrow = null;


2009年8月12日 星期三

[SQL] LEFT JOIN 關連表的使用方式

怕自己忘記 把各個STEP 作法PO出備忘

--目的:把 MODEL_ID 跟別的表欄位 關連

--原始
SELECT * FROM DBO.G_SN_STATUS
WHERE SERIAL_NUMBER LIKE 'FT1926006416978A%'

--STEP1
SELECT * FROM DBO.G_SN_STATUS AS A --1.先把表命名成 A
WHERE A.SERIAL_NUMBER LIKE 'FT1926006416978A%' --2.表都改了,所以 WHERE 條件來源也要改成 A.SERIAL_NUMBER

--STEP2
SELECT * FROM DBO.G_SN_STATUS AS A
LEFT JOIN MGERP.DBO.SYS_EMP AS B --1.加入第二個表
ON A.EMP_ID=B.EMP_ID --2.設定條件 這時候 畫面上呈現是把 第二個表 接到 第一個表的右邊
WHERE A.SERIAL_NUMBER LIKE 'FT1926006416978A%'

--STEP3
SELECT
A.SERIAL_NUMBER,
A.TERMINAL_ID,
A.STATUS,
A.NATSUIN,
B.EMP_NAME --1.把需要的欄位一一打上去
FROM DBO.G_SN_STATUS AS A
LEFT JOIN MGERP.DBO.SYS_EMP AS B
ON A.EMP_ID=B.EMP_ID
WHERE A.SERIAL_NUMBER LIKE 'FT1926006416978A%'

[C#] 鍵盤 KeyChar 值的獲得

因為有需要求找 Keychar 所以寫了一段判斷 鍵盤輸入時的 Keychar 值

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
//判斷按鍵的 Keychar
char Key_Char = e.KeyChar;
MessageBox.Show(((int)(Key_Char)).ToString());
}

結果:
` - 96
1 - 49
2- 50
3- 51
4 - 52
5 - 53
6 - 54
7 - 55
8 - 56
9 - 57
0 - 58
a - 97
b - 98
ENTER - 13
空白鍵 - 32
其他的自己找吧

2009年7月24日 星期五

[SQL] 變數DECLARE 的使用

--查詢 BARCODE --

DECLARE @SN VARCHAR(22) SET @SN='FT5514A0100197I01577X2'

SELECT *
FROM MGMES.DBO.G_SN_STATUS
WHERE SERIAL_NUMBER=@SN

SELECT *
FROM MGMES.DBO.G_SN_TRAVEL
WHERE SERIAL_NUMBER=@SN


;

--Input Barcode Find Tray --
DECLARE @SHIT VARCHAR(22);
DECLARE @SN VARCHAR(22) ;
SET @SN='ft5546t03c2197n0121002'

SELECT *
FROM MGMES.DBO.G_SN_TRAVEL
WHERE SERIAL_NUMBER=@SN;

SELECT @SHIT=TRAY_BASE_ID
FROM G_TRAY_STATUS
WHERE SERIAL_NUMBER=@SN;
--
SELECT *
FROM MGMES.DBO.G_TRAY_BASE
WHERE TRAY_BASE_ID=@SHIT;

2009年7月23日 星期四

[C#] Oracle 資料庫連接

因為公司除了使用 SQL Server Database 以外,還有另外一台 Oracle Server Database ..

所以除了可以使用 Toad 之類的軟體來處理資料庫以外,有時候為了處理一些小問題

還是會需要撰寫應用程式來處理。

Example:連線到Database 下一些 SQL 語法..

using System.Data.OracleClient; //需要引用


//oracle
using (OracleConnection aaa = new OracleConnection("Data Source=IP/Database_Name;User=帳號;Password=密碼"))
{
aaa.Open();
string cmd = @"SQL語法,例如 SELECT * FROM ......等等";
OracleCommand bbb = new OracleCommand(cmd, aaa);
OracleDataReader dd = bbb.ExecuteReader();
while(dd.Read())
{
textBox2.Text = dd["PART_ID"].ToString();
}
aaa.Close();
}

2009年7月18日 星期六

[Firefox] 擋網頁 擋網站 擋廣告(配合 FoxyProxy 套件)

由於我喜歡看小說,所以常常逛對岸的一些小說網站

所以再看小說的時候,網頁廣告(就是會跳新分頁那種)太多真是困擾了我很久

之前也有使用過 BlockSite 這個套件 ,但是總覺得用的不是很方便

所以把目前用來擋網頁廣告的方式分享出來, 也看看是不是有人會需要.

首先 必須先安裝 FoxyProxy 這個套件
1.設定一個專門用來擋網頁的 Proxy(注意:用來擋廣告的Proxy 順序要放在最上面)
在這裡我設定"垃圾"這個 Proxy名稱 作為識別













2.Proxy 設定
在 Proxy IP 填上"0" ,連接阜也填上"0" 主要用意就是讓他失效













3.開啟快速新增 啟用
這樣子 就算是簡單完成了設定













4. 接下來可以來看一下實際應用的部分
當發現有目標時(想要擋下來的目標時) 可以按 組合按鍵 "Alt + F2"















5. 結果就像下圖 網站被擋下來了
下次再跳出相同網址的頁面廣告時 , 就會自動變這樣
當然 因為網站被擋了 所以實在是想看一下廣告時 可以用 IE TAb 套件來轉
或者用 IE 來看廣告吧.











6. 目前在下已經設定了的廣告列表 就在樣式表裡面














... 只是擋了網站以後 空在那裏的頁面沒辦法 自動關閉真是美中不足

不知道有沒有人有更好的方式...

2009年5月13日 星期三

[Other] 很有趣的邏輯測試


網路上看到的 ...

---------------以下開始--------------------

TEST FOR DEMENTIA

很有趣的邏輯測試
Below are four (4) questions and a bonus question. You have to answer them instantly. You can't take your time, answer all of them immediately. Let's find out just how clever you really are. 下列有4 個問題及一個加分題,你必須立刻回答,不能花時間慢慢想,讓我們看看你有多聰明。
Ready? GO!!! (scroll down)準備好,向下捲!
First Question: 第一題
You are participating in a race. You overtake the second place person. What position are you in? 你參加賽跑,追過第 2名,你是第幾名?
Answer: If you answered that you are first, then you are wrong! If you overtake the second place person, and you take their place, you are second!
解答: 如果你的回答是第 1 名,你就錯了!你如果追過第2 名,你只是取代那人的位置,你是第 2 名。
To answer the second question, don't take as much time as you took for the first question. 回答第 2 題,你不能使用與回答第 1題相同的時間。
Second Question 第二題 :
If you are in a race, and you overtake the last person, then you are?
你參加賽跑,你追過最後一名,你是第幾名?
Answer: If you answered that you are second to last, then you are wrong again. Tell me, how can you overtake the LAST person?! You're not having a good time at this! Are you?
解答: 如果你的回答是倒數第 2 名,你又錯了!告訴我,你怎能追過最後一名?顯然你並未樂在其中!
Very tricky maths! Note: This must be done in your head only. Do NOT use paper and pencil or a calculator. Try it. 很詭異的算術!這只能在腦中盤算。不要使用紙與筆或計算機,試試看。
Third Question:第三題
Take 1000 and add 40 to it. Now add another 1000. Now add 30. Add another 1000. Now add 20. Now add another 1000. now add 10. What is the total?
以 1000加上 40 ,再加 1000,再加 30,再加 1000,現在加上 20,再加一次 1000,現在加上 10 ,總數是什麼?
Answer: Did you get 5000? The correct answer is actually 4100. Don't believe it? Check with your calculator!
解答: 得到 5000 是嗎?正確答案是4100 ,不要相信,用計算機查證吧!
Today is definitely not your day. Maybe you will get the last question right?
今天對你鐵定諸事不宜,或許最後一題你會答對?
Fourth Question: 第四題
There is a mute person who wants to buy a toothbrush. By imitating the action of brushing one's teeth he successfully expresses himself to the shopkeeper and the purchase is done. Now if there is a blind man who wishes to buy a pair of sunglasses, how should he express himself?
一個啞巴想買牙刷,他模仿刷牙的動作,成功的向店主表達,也完成了購買。現在如果一個瞎子想買一副太陽眼鏡,他要如何表達?
Answer: He just has to open his mouth and ask. He's blind, not mute - so simple.
解答: 他只要張開嘴問即可。他是瞎子,不是啞巴。就這麼簡單!


[Other] Windows Live Mail 備份郵件規則 教學

啟動註冊表編輯器的步驟如下:開始->運行->regedit

HKEY_CURRENT_USER\softwave\microsoft\windows live mail\Rules\Mail

選擇 匯出 命令,把這個郵件規則備份到安全的地方。

以後要導入此郵件規則,只要雙擊所備份的reg文件,資料就會自動導入了

2009年3月27日 星期五

[AutoHotKey] 按下熱鍵開啟連發,再按一次熱鍵 停止連發

;看得懂得人就看吧。
;--------------------------------以下開始------------------------------

#Persistent
#NoEnv

v_Enable=0
UpdateSplashImage()
{
Global
if(v_Enable=0)
{
SplashImage,,X10 Y10 H24 W36 CWFF0000 CT000000 ZX5 ZY5 B2 FS9 WS700, NO
return
}
else
{
SplashImage,,X10 Y10 H24 W36 CW00FF00 CT000000 ZX5 ZY5 B2 FS9 WS700, OK
}
}

$`::
{
v_Enable:=!v_Enable
If (v_Enable=0)
{
SetTimer, Label0, Off
UpdateSplashImage()
}
else
{
SetTimer, Label0, 100
UpdateSplashImage()
}
}
Return

Label0:
{
SendRaw, {F5}
}

2009年3月24日 星期二

[C#] 我犯了沒看書的錯..全域變數

 我寫程式喜歡把所有東西都包在 Button 裡面,可是當不同的 Button 需要用到相同的變數時

 是個很大的困擾。。。



 竟然發現要把變數放在 ..

 public partial class Form1 : Form
    {
        DataTable dt;   <----------  OK
       
        public Form1()
        {
            InitializeComponent();
            DataTable dt2; <----------NG
        }

..  太高興了

2009年3月17日 星期二

[C#] IF內部的變數,如果外部要使用的時候 小技巧(書裡面沒教的)

原本

                           
                            if (result.Rows.Count == 0)
                            {

                             km.SQLExecute("INSERT INTO MGMES.dbo.PACKAGE_SN_FILL() VALUE () ");
                            }
                            else
                            {
                                 String show5_4_1 = result.Rows[0].ItemArray[0].ToString();
                               
                            }
                          
                            string show5_4_1_ADD1 = show5_4_1.Substring(1, 5); //這時候 show_5_4_1 不能使用




改成



                            string show5_4_1="";
                           
                            if (result.Rows.Count == 0)
                            {

                                km.SQLExecute("INSERT INTO MGMES.dbo.PACKAGE_SN_FILL() VALUE () ");
                            }
                            else
                            {
                                 show5_4_1 = result.Rows[0].ItemArray[0].ToString();
                               
                            }
                          
                            string show5_4_1_ADD1 = show5_4_1.Substring(1, 5); //可以使用了

2009年3月16日 星期一

[C#] 做流水號時,不滿位數補零(0)

在寫產生流水號的時候,需求是 9 Char 位數。

 可是資料不滿的時候要怎麼來補滿呢?


  string show4_5 = string.Format("{0,1:000000000}",int.Parse(PLT_QTY_FIRST)); //數量不滿 9 位數時,前面補 0

  //很多 0 那裡是指定總位數是多少。 
  //後面的 PLT_QTY_FIRST 是指原本的變數 ,就是原本的水號。

  結果:
  初值 PLT_QTY_FIRST = 999
   
  show4_5 = 000000999

...

  太機車。。。 竟然有更簡單的

  int.Parse(PLT_QTY_FIRST).ToString("000000000");

 


[C#] DateTimePicker 指定表示格式的方法

爬文看了一堆,沒想到最後試出來  是那麼簡單。。
 

  //這是改變顯示於 螢幕上 的部份
  public Form1()
        {
            InitializeComponent();
        
            dateTimePicker1.CustomFormat = "yyyy-MM-dd";

        }


 當選取日期變更以後,要得到變更後 的值:

 string PLT_DATE_FIRST= this.dateTimePicker1.Text; //把變更後的 Data 放到 PLT_DATE_FIRST 變數內容裡面



C# 檢查是否為數字 或 字串

 可以用在 Textbox 上來檢查 使用者 輸入的時候 是  純文字  或  純數字


   public bool CheckIsNumber(string s)
        {
            char[] tmp = s.ToCharArray();
            for (int i = 0; i < tmp.Length; i++)
            {
                if ((int)tmp[i] < 48 || (int)tmp[i] > 57)
                    return false;

            }
            return true;
        }


                 實做:

                   if (CheckIsNumber(textBox2.Text) == true)
                  
                       {
                            MessageBox.Show("你輸入的是 純數字");


                        }
                        else
                        {
                            MessageBox.Show("請輸入 數字!!");
                       
                        }

C# 內崁資源圖檔開啟 (Part 2)

之前 有PO過 爬文爬到的 圖檔開啟方式。。

但是用了以後覺得挺麻煩的。。


試了一下,發現有更快的方式。


Step1:  拉個 pictureBox1 控件進來 From

Step2:  點選 pictureBox1 控件,去屬性裡面找 Image 的地方,進去以後
            直接加入要 Show 的圖檔。

Step3: ok 搞定。

         
     很快吧!!

C# ASP.NET 竟然沒有全域變數可以使用

寫到一半,突然發現 Web 模式下 我竟然沒有 全域變數 可以使用。

這樣子在寫程式過程 真的是很不方便。。。

網頁上 每按一個 Button 等同於 程式重跑一次。。。  那我的常數怎麼辦?


爬了一下文,可以用 Session 來作..




 protected void Page_Load(object sender, EventArgs e)
    {

        if (Session.Count != 0)  //判斷Session 不是 0, 才開始使用 Session
        {
            TextBox4.Text = (String)Session["QQQ"].ToString();
        }
     
    }


實做部份

 Session["QQQ"] = "123";


這樣子常數就記得了。



C# ASP.NET 與MessageBox.Show 的相同用法

開始寫 Web From 以後發現,MessageBox.Show 竟然不能使用了。。。


爬文找到了。。


Response.Write("<script>alert('你輸入的料號長度不對,請確認有包涵『.』料號!')</script>");


2009年3月5日 星期四

C# Int String 互轉換方式

  簡單的String轉換用 ToString()方法  
  複雜的用System.Convert.ToString()  
 
  簡單的int轉換用int.Parse(xxxxxxxxxxxxxx)  
  複雜的用System.Convert.ToIntXX()

 

2009年3月4日 星期三

C# Substring 使用(徹底解決 擷取字串長度不足的問題)

如標題,加入下列原始碼

                    使用方法:
                    string strDD = textBox7.Text;   //來源資料
                    string qty = SubString(strdate, 0, 5); //擷取第一段
                    string lotno = SubString(strdate, 5, 100); //因為不知道總長度多少,所以設多一點
                   
                    listBox2.Items.Add(qty);
                    listBox2.Items.Add(lotno);





原始碼:

  public static string SubString(string strDD, int startIndex, int length) //解決字串擷取超過範圍的問題(新類別)
        {
            int intLen = strDD.Length;
            int intSubLen = intLen - startIndex;
            string strReturn;

            if (length == 0)
                strReturn = "";
            else
            {
                if (intLen <= startIndex)
                    strReturn = "";
                else
                {
                    if (length > intSubLen)
                        length = intSubLen;

                    strReturn = strDD.Substring(startIndex, length);
                }
            }
            return strReturn;
        }

C# Substring 使用(以 空白格 為條件,拆成一行一行)

Substring 使用(以 空白格 為條件,拆成一行一行)


 char[] delimit = new char[] { ' ' };
 string s10 = textBox7.Text;
 foreach (string substr in s10.Split(delimit))
   {
   listBox2.Items.Add(substr);
   }

2009年3月3日 星期二

C# Tabcontrol 的秘密!

通常我們會在 Tabcontrol 這個控件裡面 做一些事情,當然 少不了輸入(Key in 或 用 barcode reader)一些資料

問題來了,當我點選 tabpage 的時候,要能自動 把 Focus 放在 textbox 裡面,方便開始作業。


不是在 Page 事件裡面,反而是在 Control 的事件裡

 
private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e)
        {
            switch (this.tabControl1.SelectedIndex)
            {
                case 0:
                    textBox1.Focus();
                    break;
                case 1:
                    textBox5.Focus();
                    break;
                  
            }
        }


以上

我們的 TEAM ,被迫改名。。

話說 今日上午 跟大老闆開早會,說到我們小組名稱  BCS - Barcode System

他說太 Low了  -___-||||||

要我們改名字,還幫我們想好了新名字 FMES -  Fxxxx Manufacuring Execution System

簡單來說就是 製造執行系統。

現在困擾的是,我的 Logo 要做成怎麼樣?  有人會做 Logo 嗎?

C# Split 的使用

 
網路上爬文爬很多,但是用起來卻是有點問題。。。疑惑

自己試了一下,這麼做是可以用的。



 if (aa.StartsWith("0,") == true)  //我先判斷變數里面的內容,如果 資料開頭以 [0,]起始,才開始做
                {
                    string qqqq = aa.Split(',')[5].ToString();  //以[,]為區隔,取第五個[,]以後的資料。
                    string qqqq1 = aa.Split(',')[8].ToLower();
                    listBox1.Items.Add(qqqq+"      "+qqqq1);
              
                }

2009年2月24日 星期二

ORA-12705 Oracle 問題解決方式

用 C# 寫了一支表單程式,將資料丟上 Oracle 資料庫,結果出了問題。

ORA-12705: Cannot access NLS data files or invalid environment specified


詳細的錯誤細節就不說了,爬了很多的文,也一一確認,最後發現是 本身電腦已經有安裝 Oracle Database

原本已安裝 Oracle database 9
本次預定連線至 Oracle database 10i

解決方式:
將 \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 內找出 NLS_LANG 子機碼

預設是 NA 的值,將 NLS_LANG 變更名稱 --> NLS_LANG2  即可。

也擔心原先 Oracle database 9 的不能跑,試跑了一下。。竟然OK。。

果然有效阿!!! 真好。



C# 字串的語法

字串處理應該是 最常用的吧,最近開始接觸到了,把一些有需要的集中在一起。

例如以下.

string debug_sn = listBox2.SelectedItem.ToString(); //把Listbox2 裡面選到的項目 送到 debug_sn 的變數里面
if (debug_sn.StartsWith("F") == true) //判定開頭是不是 F 開頭,主要是因為我的 Listbox2 裡面有其他資料
{
textBox7.Text = debug_sn.Substring(0, 5); //從 0 位址開始擷取,取 5 個字元
textBox8.Text = debug_sn.Substring(0, 10);
textBox9.Text = debug_sn.Substring(10, 5);
}


其他網站找到的。
(來源:http://www.dotblogs.com.tw/yc421206/archive/2008/11/03/5863.aspx )


String.Compare:比較兩個字串的值。傳回整數值。
String.CompareOrdinal:比較兩個字串,不管本地文化特性。傳回整數值。
String.CompareTo:將目前的字串物件與另一個字串加以比較。傳回整數值。
String.StartsWith:判斷字串的開頭是否為傳入的字串。傳回布林值。
String.EndsWith:判斷字串的結尾是否為傳入的字串。傳回布林值。
String.Equals:判斷兩個字串是否相同。傳回布林值。
String.IndexOf:從您正在檢查的字串開頭開始,傳回字元或字串的索引位置。傳回整數值。
String.LastIndexOf:從您正在檢查的字串結尾開始,傳回字元或字串的索引位置。傳回整數值。

字串處理範例:
http://msdn.microsoft.com/zh-tw/library/ms228364%28VS.80%29.aspx

常用C#字串處理函數
http://msdn.microsoft.com/zh-tw/library/system.string_methods%28VS.80%29.aspx

名稱 說明
Public method Supported by the .NET Compact Framework Clone 傳回對 String 這個執行個體的參考。
Public method Static Supported by the .NET Compact Framework Compare 多載。 比較兩個指定的 String 物件。
Public method Static CompareOrdinal 多載。 藉由評估每個字串中對應的 Char 物件之數字值,比較兩個 String 物件。
Public method CompareTo 多載。 將這個執行個體與指定的物件或 String 相比較,並傳回它們的相對值指示。
Public method Static Supported by the .NET Compact Framework Concat 多載。 串連一個或多個 String 的執行個體,或者一個或多個 Object 執行個體值的 String 表示。
Public method Contains 傳回值,指出指定的 String 物件是否會出現在這個字串內。
Public method Static Supported by the .NET Compact Framework Copy 使用與指定的 String 相同的值,建立 String 的新執行個體。
Public method Supported by the .NET Compact Framework CopyTo 將字元的指定數目從這個執行個體的指定位置,複製到 Unicode 字元陣列的指定位置。
Public method Supported by the .NET Compact Framework EndsWith 多載。 判斷 String 執行個體的結尾是否符合指定之字串。
Public method Supported by the .NET Compact Framework Equals 多載。 覆寫。 判斷兩個 String 物件是否具有相同的值。
Public method Static Supported by the .NET Compact Framework Format 多載。 以與對應物件值相等的文字,取代指定 String 中的每個格式項目。
Public method GetEnumerator 擷取可以逐一查看這個字串中個別字元的物件。
Public method Supported by the .NET Compact Framework GetHashCode 覆寫。 傳回這個字串的雜湊程式碼。
Public method Supported by the .NET Compact Framework GetType 取得目前執行個體的 Type。 (繼承自 Object)。
Public method Supported by the .NET Compact Framework GetTypeCode 傳回類別 String 的 TypeCode。
Public method Supported by the .NET Compact Framework IndexOf 多載。 報告這個字串中 String 或一或多個字元之第一個符合項目的索引。
Public method Supported by the .NET Compact Framework IndexOfAny 多載。 報告指定 Unicode 字元陣列中的任何字元於這個執行個體中第一個符合項目的索引。
Public method Supported by the .NET Compact Framework Insert 在這個執行個體的指定索引位置,插入 String 的指定執行個體。
Public method Static Supported by the .NET Compact Framework Intern 擷取指定的 String 的系統參考。
Public method Static Supported by the .NET Compact Framework IsInterned 擷取對指定 String 的參考。
Public method IsNormalized 多載。 指出這個字串是否為特定的 Unicode 正規化格式。
Public method Static Supported by the .NET Compact Framework IsNullOrEmpty 指出指定的 String 物件是否為 Null 參照 (即 Visual Basic 中的 Nothing) 或 Empty 字串。
Public method Static Supported by the .NET Compact Framework Join 多載。 將指定 String 陣列每個元素之間的指定分隔符號 String 串連,產生單一的串連字串。
Public method Supported by the .NET Compact Framework LastIndexOf 多載。 報告這個執行個體中指定 Unicode 字元或 String 最後項目的索引位置。
Public method Supported by the .NET Compact Framework LastIndexOfAny 多載。 報告 Unicode 陣列中的一個或多個指定字元在這個執行個體中最後項目的索引位置。
Public method Normalize 多載。 傳回新的字串,其二進位表示為特定的 Unicode 正規化格式。
Public method Static Supported by the .NET Compact Framework op_Equality 判斷兩個指定的 String 物件是否具有相同的值。
Public method Static Supported by the .NET Compact Framework op_Inequality 判斷兩個指定的 String 物件是否具有不同的值。
Public method Supported by the .NET Compact Framework PadLeft 多載。 將這個執行個體中的字元靠右對齊,以空格或指定的 Unicode 字元在左側填補至指定的總長度。
Public method Supported by the .NET Compact Framework PadRight 多載。 將這個字串中的字元靠左對齊,以空格或指定的 Unicode 字元在右側填補至指定的總長度。
Public method Static Supported by the .NET Compact Framework ReferenceEquals 判斷指定的 Object 執行個體是否為相同的執行個體。 (繼承自 Object)。
Public method Supported by the .NET Compact Framework Remove 多載。 從這個執行個體中刪除指定數目的字元。
Public method Supported by the .NET Compact Framework Replace 多載。 以另一個指定的 Unicode 字元或 String,取代這個執行個體中指定的 Unicode 字元或 String 的所有項目。
Public method Supported by the .NET Compact Framework Split 多載。 傳回 String 陣列,其中包含這個執行個體中由指定的 Char 或 String 陣列之元素所分隔的子字串。
Public method Supported by the .NET Compact Framework StartsWith 多載。 判斷 String 執行個體的開頭是否符合指定之字串。
Public method Supported by the .NET Compact Framework Substring 多載。 從這個執行個體擷取子字串。
Public method Supported by the .NET Compact Framework ToCharArray 多載。 將這個執行個體中的字元複製到 Unicode 字元陣列中。
Public method Supported by the .NET Compact Framework ToLower 多載。 傳回轉換成小寫的這個 String 複本。
Public method ToLowerInvariant 傳回轉換成小寫的這個 String 物件之複本,透過的方式是使用不因文化特性而異的大小寫規則。
Public method Supported by the .NET Compact Framework ToString 多載。 覆寫。 將這個執行個體的值轉換為 String。
Public method Supported by the .NET Compact Framework ToUpper 多載。 傳回轉換成大寫的這個 String 複本。
Public method Supported by the .NET Compact Framework ToUpperInvariant 傳回轉換成大寫的這個 String 物件之複本,透過的方式是使用不因文化特性而異的大小寫規則。
Public method Supported by the .NET Compact Framework Trim 多載。 將指定字元集的所有項目從這個執行個體的開頭和結尾移除。
Public method Supported by the .NET Compact Framework TrimEnd 將陣列中指定的字元集之所有項目從這個執行個體的結尾移除。
Public method Supported by the .NET Compact Framework TrimStart 將陣列中指定的字元集之所有項目從這個執行個體的開頭移除。



String.Substring( ):從指定的字元位置開始截取字串
語法:字串變數.Substring(左起始位數 , 取幾位)
範例:string s1 = str.Substring(0,2);

String.length():取得字串長度
String.Remove(int1,int2):從int1(起始位置)開始刪除長度為int2的字串
String.Insert(int,string):在int的位置插入string
String.Substring(int):從參數開始取出剩下的字串
String.Substring(int1,int2):取出int1開始長度為int2的字串
String.IndexOf(string):傳回第一次搜尋到字串(string)的位置
String.IndexOf(string,int):傳回第一次搜尋到字串(string)的位置,開始搜尋位置為int
String.LastIndexOf(string):跟IndexOf功能類似,但從後面開始搜尋
String.LastIndexOf(string,int):跟IndexOf功能類似,但從後面開始搜尋
String.Replace(char,char):取代字元
String.ToLower():將英文轉成小寫
String.ToUpper():將英文轉成大寫
String.Trim():刪除字串前後的空白字元
String.TrimEnd():刪除字串尾部的空白字元
String.TrimStart():刪除字串開頭的空白字元

2009年2月20日 星期五

公司內使用 3.5G 無線網卡連接外網的方法(未完)

由於 公司有自己的內部網路,通過公司網路 經由 Proxy 來收信、上網、開啟公司內區網資料夾
但是 公司有鎖一些對外的 Port ,所以很多壞事都不能做 -_-|||

在下有 3.5G 的無線網卡,想說可以一起使用 ,達到可以一邊收公司的信件來處理公事,
一方面又可以連上我喜歡的網站下載一些資源。

重點是如何來實現。

Test 1 :
將 3.5G 裝上,同時公司網路 也接上,發現 E-Mail 等都通過 3.5G 來處理,
查了一下原因,是因為 3.5G 速度快(Metric 比較低),Windows 在處理的時候
會自動優先選擇 Metric 比較低的網路,所以變成 公司網路完全無視!!

Test 2:
上網爬文發現,可以利用 Route 來做一些 指定的功能。

在MS DOS 下執行:
route print (可以檢視目前 的狀態)
route add 目標IP mask 子遮罩IP 希望走的網路Gateway

只是 測試了以後發現,還是不行阿。。。
只好先擺者,有空在研究了!!

未完

C# 鍵盤的按鍵判斷

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
//判斷 textbox1 裡面是不是 按Enter(Enter = 13) ,如果是 才動作
if (e.KeyChar == 13)
{
button1.Focus();

}

C# Try catch 例外處理!!超強~

再也不怕程式死當了!!



try
{
if (!string.IsNullOrEmpty(strValue))
{
File.WriteAllText(strFile, strValue, Encoding.UTF8);
MessageBox.Show("下載好了");
}
}
//直接把程式錯誤訊息 Show 出來
catch(Exception QQ)
{
MessageBox.Show(QQ.Message.ToString());
}
}

C# 將 DataGridView 匯出至 CSV 檔案

private void button2_Click(object sender, EventArgs e)
{
string input_date2 = textBox1.Text;
string strValue = string.Empty;
//CSV 匯出的標題 要先塞一樣的格式字串 充當標題
strValue="系統流水號,桃園,機種,條碼,電測工程,日期,時間,其他EQ,樓層,線別,工號,直別,不良項目,不良位置,不良內容,其他1,其他2,其他3,更新時間";
for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
{
for (int j = 0; j < dataGridView1.Rows[i].Cells.Count; j++)
{
if (!string.IsNullOrEmpty(dataGridView1[j, i].Value.ToString()))
{
if (j > 0)
strValue = strValue + "," + dataGridView1[j, i].Value.ToString();
else
{
if (string.IsNullOrEmpty(strValue))
strValue = dataGridView1[j, i].Value.ToString();
else
strValue = strValue + Environment.NewLine + dataGridView1[j, i].Value.ToString();
}
}
}

}
//存成檔案(注意!!當有中文字的時候 存檔案一定要用 UTF8)

string strFile = "C:\\FET每日異常紀錄-"+input_date2+".csv";

if (!string.IsNullOrEmpty(strValue))
{
File.WriteAllText(strFile, strValue, Encoding.UTF8);
MessageBox.Show("下載好了");
}

}

}

2009年2月13日 星期五

C# Listbox1 內點選項目,並開啟檔案

//當選取 Listbox1 內容時的動作
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//避免選擇為空 的選項
if ((string)listBox1.SelectedItem != "")
{
//判斷 檔案是否存在
if (System.IO.File.Exists(listBox1.SelectedItem.ToString()) == true)
{
//檔案存在,開啟檔案
System.Diagnostics.Process km = new System.Diagnostics.Process();
km.StartInfo.FileName = listBox1.SelectedItem.ToString();
km.StartInfo.UseShellExecute = true; //非執行檔也可以使用,若false則指定 執行檔才能執行
if (km.StartInfo.FileName != "")
{
km.Start();
}
System.Threading.Thread.Sleep(500); //delay 一下

}
else
{
//檔案不存在,所以將 點選Listbox1 選中的 Item 秀出。
MessageBox.Show(listBox1.SelectedItem.ToString(), "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
}
}
}

2009年2月11日 星期三

武林群俠傳 - 1~80 刑天打怪地點

1~11等:
大約1小時內就可以達到,跟著任務跑
11~30等:
這個階段大家跟著任務跑 大約到23~25等就會覺得好難練,有卡的感覺 這時可以去找你黃字的怪打 當然還是要過任務 你可以分時間 1小時都打怪 1小時都過任務(這 樣也鍊滿快的)
30~37等:
都在廢棄村莊黃金梯田吧,這時大家要去過''挑戰3郎'' 每天都要把3次過完唷!假如都過完,不要退隊 繼續打怪 可以去打廢棄村莊狗狗 很好練
37~45等:
就去千山嚕(有人會說40等在去比較好) 可是我覺得37等去打千山教徒(不會痛經驗又多),打到40等左右,改打異狼他會掉''凡品紅銘''40等~45等應該可以打到4~5個 42等感覺不好練時可以去打蜘蛛
45等~49等:
荒郊猴子就是打猴子就好了 前期會痛一點 不過很好練
49~55等:
幽魂凱晰49~51等 打他時可能不太痛 感覺不好的話可以回去打猴子 重點是52等~55等就一定要打詭蜥~扁幅太硬了(雖然他的王聽說會掉 ''上品的紅銘絲'')不過還是打詭蜥就好(裝備夠好的就去打扁幅八)
55等~59等:
溫泉谷孤堡偵查兵就是打這個就好 別是打機械鳥 他經驗跟修行值都比偵查兵查兵的王會掉~60等''上品氣脈+4戒指''巡邏兵的王會掉''上品紅銘絲''
59等~65等:
彩虹步道惡賊或是電魚 電魚王會掉''極品紅銘絲''
65等~70等:
兵器塚白靈蜥一值打就對了~
70~75等:
生命花園女飛賊(修刑比較多) 或是織蜥會掉''力量+5的戒指跟鍛造點金福''還有機關偏福(這2種是經驗比較多)
75等~81等:
晴陽谷利光爪鷹(有時會有很多人可以去打朱血厭)
75等一定要學的技能(上古天魔神訣(滿) 破天擊(滿) 返怒(滿))
不要用刑天斬托怪 請用破天擊+刑天吼
再用上古天魔神訣+返怒來練功

2009年2月10日 星期二

User 電腦發生 找不到 Dllregisterserver 進入點,解決方式

程式開發語言:Microsoft Visual C# 2008 Express Edition
開發環境:Net Framework 2.0

主要功能是 在Client 端 透過 SQL Server 進行資料新增、比對。。等功能
但是 在 Client 開啟程式後發生了 找不到 Dllregisterserver進入點 的問題

解決方法:複製 Sqldmo.dll 、Sqldmo.rll 兩個檔案到 System32\resources\1033 目錄下
(如果沒有該目錄,自己建立)

執行註冊: Regsvr32 sqldmo.dll

成功的話會看到 messageBox 顯示 註冊成功。

再來就可以順利執行程式了.

//2011-11-30 追加
註冊方式 說明
--使用Regsvr32 使用者是Administrator 權限時
--使用Gacutil.exe 使用者是一般使用者
(Microsoft (R) .NET Framework 全域組件快取公用程式)

點我檔案下載
附件內容有
1.)gacutil.exe
2.)Interop.SQLDMO.dll

//2011-12-02 追加
若是因為某些 機碼清除工具  清除過後產生的後遺症
或許可以試著 重新註冊 Windows dll 檔案

重新註冊Windows XP 所有的dll檔操作方法:
1.開始->執行 輸入 cmd 按「確定」
2.在命令提示符下輸入下列資料:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
上述指令輸入完畢即可









C# 內崁資源圖檔開啟

爬文看到的,自己實做試了一下。 還蠻簡單的.

1.) FORML.CS(設計)部分要拉一個 pictureBOX1
2.) 把圖檔拉到方案總管裡面,右鍵 建置動作選屬性改成 內崁資源
3.) Code 如下

using System.Reflection; // 內坎圖片的 using



private void Form1_Load(object sender, EventArgs e)
{
Assembly asm = Assembly.GetExecutingAssembly();
string name = asm.GetName().Name;
Bitmap bmp = new Bitmap(asm.GetManifestResourceStream(name + ".111.jpg"));
//載入圖片資源
this.pictureBox1.Image = bmp;
}

2009年2月9日 星期一

遠傳 3.5G 老是斷線。。-2

上次說到 GPRS 連線後的速度,這一次實際上抓圖給各位看...


遠傳官網釋出 連線速度測試。(3K/sec)















下載 Hinet 測速網站提供 20MB 檔案速率(Max 5K/sec)















所以速度還真的不是很理想阿。。

國軍 online

網路上爬文的時候看到的,轉貼

國軍online是一款歷史悠久的網路遊戲,也是我國最多人同時上線的 Online Game,同時約有30萬人次在線。

  它有最穩定的遊戲品質,保證絕不斷線,最遼闊、最真實的地圖,另有100多個大大小小的島嶼地圖等著您冒險。

  最複雜的轉職系統,與各種豐富且冗長的任務內容。

  最刺激的副本、攻城戰及血盟戰等您來挑戰。

  各式精美﹙?﹚武器裝備供玩家使用。

  歷練過這款遊戲的英雄勇士高達上千萬人,且每個月都有源源不絕的初新者加入遊戲,旦凡持有中華民國國民身份證,並屆齡十八至四十歲之男子皆有義務進入遊戲。

  國軍online有著世界上最先進的技術,全3D虛擬實境與杜比環場音效,以及高達百分之百的痛苦度與疲勞度感受回饋,讓初新者們不用頂著大熱天在太陽下排隊買虛擬實境的頭盔,也不用省喫儉用的存錢買遊戲艙。

  我們偉大的遊戲公司「國防部遊戲公司」會為所有初新者,也就是所有即將進入遊戲的初新者準備好一切,提供伙食、用品、財帛……

  初新者只需要攜帶身份證晶卡及各城城主發給眾鄉民的關防證明文件,就可以開始自己的YY之旅了。

  當我從綠衣催狂魔手中收到南投城主大印的「國軍online種族抽籤文件」時,心中除了驚嚇到屁滾尿流外,還是驚嚇到屁滾尿流。

  這代表我即將進入眾多鄉民、宅神前輩所痛恨的遊戲世界。

  這個遊戲的YY程度,只有你想不到,而沒有不可能,裡頭處處充滿驚喜,驚訝腦殘眾多、喜悅原來自己並不笨。

  國軍online每每在電視上、就職博覽會上招募國軍online豪華版玩家,我聽了就想吐口水,什麼「加入志願初新者,未來不是夢!」

  我覺得這口號實在太噁心了,那裡是吞噬、摧毀夢想的大本營,你都成為最卑劣的存在了,怎麼還會有夢呢?

  所以,加入志願初新者的,大部分都沒什麼好下場。

  其實我覺得,剛加入的新手玩家應該不能稱之為「初新者」,而是應該稱呼為「奴隸」。

  而國軍online的宣傳口號也要改成「國軍online並不是每件事情都合情合理,但一定每件事情都莫名奇妙!」

  中國人都說,誠實是一種美德,可是國防部遊戲公司跟詐騙集團沒什麼兩樣,都是先把人騙進來了再說。

  而這個詐騙集團還非常沒有良心,好歹世界最大的詐騙集團微軟及台灣最黑的中華電信詐騙集團都沒有虐待受害者的案例啊!

  我看著眼前蓋著火紅的南投城主大印的文件,幽幽的嘆了一口氣,只恨我忘記去申請「替代役online」或「補充役online」。

  現在可好了!後悔都來不及了。

  難怪人們總是說,後悔的感覺很難受,遺憾的感覺很悲傷,現在我對於這句話很有深刻的體悟。

  各方好友得知我即將登入遊戲,現正在準備遊戲前種族選取時,都拍著我肩膀說「好好抽,祝你抽到海陸族……」

  然後囂張的哈哈大笑離去。

  每個鄉民都知道,國軍online有四大種族,分別為空族、海族、陸族及海陸族,外加隱藏的神祕種族「憲族」。

  種族在遊戲開始前集合眾多鄉民抽選,更增加遊戲的趣味性?

  狗屁啦!

  一開始剛進入抽籤會場的時候,我看到桌上有頂高聳俏皮的巫師帽,心中頓時疑雲滿佈,滿腦子都是問號。

  「哇靠!遊戲公司這麼大手筆,還特地跟霍格華茲借來了分類帽?只是我不想去像是史萊哲林的海陸族,我想去很悠哉的葛萊分多-空族。」我一邊盯著分類帽瞧著,一邊希望分類帽開口唱歌跟我SAY HELLO,這樣我就能跟哈利波特一樣跟它搭起友誼的橋樑。

  「少年ㄟ……你幹麻盯著我的帽子一直看?」這時候走出來一個滿臉橫肉、面煞兇惡的壯漢一把撞開我把帽子滑稽的戴在他頭上。

  我只好摸摸鼻子很糗的找個位置坐好,這時候抽籤儀式開始了。

  我在台下驚的皮皮挫,台上一個個叫號上台抽籤,那種五味雜陳的心情實在不為外人所知。

  眾所皆知,四族之中最爽的空族及最勞累的海陸族,每當鄉民抽到時,都會引起一陣驚呼。

  他人抽到空族,人們怨恨最爽的種族少一個名額,是怨恨的驚呼。

  他人抽到海陸族,人們喜悅最勞累的種族少一個名額,是高興的驚呼。

  我的心情隨著呼叫聲七上八下,在輪到我時,其實心中很平靜,四族之中,到底我為何族?

  「稚氣俠,陸族!」喔耶,心中暗暗鬆了一口氣,排在我前頭那位抽到海陸族,當下痛哭失聲然後暈倒被攙扶出去,害我緊張的要死。

  陸族佔國軍online的大多數,勢力龐大錯綜複雜,聽說是國軍online最黑暗的種族。

  陸族被廣大鄉民暱稱為陸族乞丐軍,其餘種族為海族童子軍、空族少爺軍、海陸流氓軍,憲族神仙軍。

  在這邊,抽到空族的通常都是受到上天眷顧的夜精靈、妖精,像我這種平凡喜愛破壞地球受到上蒼鄙棄的人類,多數都成為陸族。

  種族選取完之後,就是好一陣子的遊戲先前準備,這陣子大部分的鄉民都會到處爬文,詢問各方正在遊戲、或是結束遊戲登出的英雄好漢,該帶什麼、該準備什麼、該做什麼?

  「還好我很鄉,準備的很齊全。」我心中暗自得意。

  遊戲前那種忐忑不安的心情是很煩燥的,本人稚氣俠自認為沒做過什麼傷天害理的大事。

  雖然偶爾幼稚一把外,坐捷運、公車時候都有禮讓老弱婦孺,走斑馬線的時候都刻意等待有無辣妹需要攙扶,平時運氣也不是很差,所以倒是看得很開。

  畢竟我這個幼稚到號稱稚氣俠的俠之大者,修養可是超出一般鄉民許多的。

  可是,我卻沒想到,登入遊戲卻是我厄運的開始。

  在登入遊戲的那個早晨,父親懶洋洋的半臥在客廳的椅子上,我沮喪的表情讓父親覺得很逗,他決定在我登入遊戲前好好的嘲笑我一番。

  「要出去了哦?早餐要不要吃個饅頭?」父親用著關懷的口氣問道。

  我心中實在幹的可以,連3歲小孩都知道登入國軍online需要吃一整年的饅頭,今天還叫我吃饅頭?有沒有搞錯……

  各位客倌阿,一整年誒!365天扣掉假日也得吃掉上百顆饅頭,這時候還叫我吃饅頭,分明是討罵嘛!

  可惜,他是我老爸,我只能不理會他的挑釁,忙著用通訊器跟眾多女孩一一拜別,我覺得我心情很悽涼。

  有一種風蕭蕭兮易水寒,壯士一去不復返的感慨。

  這時候我覺得我很像荊軻,但是卻沒有人為我擊築喝采,我要一個人獨自出征。

  所謂「大將南征膽氣豪,腰橫秋水燕翎刀。」我沒帶刀更不是大將,所以我是膽小鬼……

  膽小鬼膽小鬼膽小鬼……

  我不知道我到底是捨不得大家,還是怯步於登入國軍online這件事情。

  或許,兩者都有吧?我搞不太清楚。

  我帶著準備好的空間袋來到了集合的地點,遊戲公司特地為各位準備告別死老百姓的初新者準備了龍貓公車。

  大夥都不是第一次搭龍貓公車,心情到是不見得多緊張,只是龍貓公車到達的地點「中坑新手村」,這就很令人緊張了。

  這個新手村位在嘉義城,從我們南投城過去以龍貓公車不知道幾百匹的馬力,要2個多小時,途中我們還會去接隱居深山大澤裡面的老百姓。

  一群人在龍貓公車裡面實在很聒噪,我知道的,我們這群鄉民是在企圖掩飾心中的不安與徬徨。

  大家都很鄉,嘴巴開始說自己的朋友、網路上看到的消息,說初新者訓練如何如何,說新手村的長官如何如何。

  這些口頭上嘴砲只是企圖讓別人以為自己一點都不懼怕當兵。

  我無聊撐著頭冷眼旁觀,看著飛逝而過的風景,離嘉義的新手村越近,我的內心就越沉重,這時候公車裡面的音量也小了,大家都有一個好似走進阿茲卡班的恐懼感。

  我在剛上龍貓公車的時候就巧遇國小同學林坤弘,看到他跟我同一期進入萬惡的國軍ONLINE我很高興,至少里面還有一個認識的人,進去或許可以互相扶持照顧,打怪解任務也比較不孤單。

  當來到新手村大門口的時候,按照慣例要填姓名及帳號密碼。

  我們一群鄉民緊張的很,網路遊戲大家都不是第一次玩,帳號密碼這種小CASE不放在我們眼裡,只是你填帳號密碼的時候兩旁穿著草綠色的迷彩服一直鬼吼鬼叫,實在令人緊張。

  登入「國軍ONLINE義務役1.0正式版」。

  「快輸入帳密!搞甚麼東西!他媽的!」剛進入新手村大夥就被一個瘋子高八度音的吼聲嚇著,我手腳並用迅速輸入帳密,以免發生不測。

  帳號906R5B3C

  密碼2030T1121

  這時候我仔細觀察眼前這個穿著迷彩服,一副天大地大老子最大的下士騎士,他說他暱稱是班長,官階是下士騎士,跟我們這群初新者是不同的。

  像我這們群死老百姓轉職的初新者,通過層層的考驗出新手村的時候,會得到二兵賤民的稱號,再過半年會得到一兵平民的稱號。

  而豪華版的志願役甚至可以得到上兵公民的稱號。

  不管我們是甚麼背景,都不能弗逆來自騎士的命令。

  下士騎士是騎士當中等級最低的,他們往上升級轉職還有中士黃金騎士、上士皇家騎士、最高等級的士官長神聖騎士。

  管這些騎士的則是帶著爵位的老爺們,從最低等的少尉勳爵、中尉男爵到上尉子爵。

  然後接著才是統治階層的少校伯爵、中校侯爵、上校公爵,還有最頂端的享受階層少將王公、中將親王、上將國王。

  當然在新手村最大也才一個公爵,那些什麼王的像我們這些等閒賤民、初新者是看不到的,電視魔法設備上看到的例外。

  剛進來就被騎士下馬威,很多人都很不爽,我很想跟他說「老子只是來打醬油的,關你屁事哦!」

  可是我怕別人都收到「回家捲軸」的時候,我還不能登出遊戲被卡帳號。

  這樣就他媽的太糟糕了,所以我只能當作這個騎士大人汪汪叫,我沒聽到。

  騎士大人領著一群鄉民進入大觀園!?

  一路上樹林成蔭,冷風颼颼,我覺得我們這群人好像是牛頭馬面帶路要去枉死城酆都的冤魂。

  說真的,我挺冤枉的,簡直是比竇娥還冤啊!我明明量體重的時候加減乘除下來BMI都不到16,為什麼體檢單出來會是18?

  「哦……不!」我內心哀嚎著。

  「他媽的!是在慢吞吞個什麼勁!你們他媽的不會走快點是吧?」騎士大人的一陣怒吼,全部鄉民拎著包包用小跑步的往他手指的方向跑去。

  我這時候注意到,這個騎士很喜歡說髒話,講話沒有他媽的穿插其中好像會變成啞巴似的。

  可是,在這個陰風陣陣的新手村,我不敢聲張,可是我也不想用跑的,笑話,所謂欲速則不達,這個道理我是懂得。

  跑那麼快,第一個到達所謂的步五營兵器連一定沒啥好事情,搞不好還要幫後面的鄉民辦事。

  話說,從進來的這一刻,其他的鄉民都變成友軍、鄰兵也就是通稱的同梯,這是新手村定的規矩還是遊戲公司訂的我不太清楚。

  但是我知道很少有人喜歡這款戰略遊戲,但是身體沒殘缺就得進來的規定讓所有鄉民都很度爛,還好今年遊戲公司比火箭隊還慈悲,特地把一年八個月的役期改成一年。

  真是佛心來著,等我下線的時候遊戲公司要是再度改回兩年我會更歡喜!

  我一到達新手村我報到的五號旅館前面,就有NPC組織我們一群奴隸,像是串蘿蔔般的叫我們一群人排好、排整齊。

  眼前寫著「中坑精北營區步槍兵第五營兵器連」的旅館匾額小小的,要不我眼尖還發現不了。

  我們這一個月即將在這個新手村的第五間旅館度過,旅館的主人是個年輕的伯爵,當然我們是看不見的,這些都是騎士說的,這個騎士叫做吳俊彥,他說,那個很喜歡說他媽的長的矮矮胖胖、圓滾滾像是郝劭文的騎士叫做林坤達,是我們旅館騎士中比較和藹可親的。

  我聽到嚇了一大跳,這麼樣子還算和藹可親,那凶狠的不就吃人了?

  「呵呵」吳俊彥騎士嘴角牽扯一道神秘的笑容,讓人不寒而慄。

  「大家好,我是皇家騎士蔡建勳,你們要記住我的名,以免下了地獄還沒辦法向閻羅王告狀,呵呵……」蔡建勳是這間步五營兵器連旅館唯一的皇家騎士,資格之老連子爵連長都得讓他三分。

  大家在下面排隊的時候嘻嘻哈哈的,根本就不怎麼甩他,我冷眼旁觀這一切,雖然站的不是很直,但至少沒有白痴的逗來弄去。

  「他媽的B,幹,全部立正!」一聲霹靂驚四方,所有的人被氣勢如虹的皇家騎士大絕招獅子吼打到,全部的人當場石化。

  我覺得有人一定狂噴血,還好沒有人當場被秒殺抬出去,我雖然自信敏捷高智慧高,可是也沒把握打的過發著金光的皇家騎士,所以我跟其他奴隸一樣被石化定住。

  接下來一陣好戲,許多剛剛邊吵邊玩跟幼稚園小朋友一樣歡樂的奴隸被抓出去PK,當場做了許多高難度的武技,累的是那個喘啊!

  我很慶幸剛剛很識相,難怪進來之前總有人說「不打勤,不打懶,專打不長眼」是騎士的職責。

  所以,不長眼是這個遊戲的大忌。

  這種團體軍訓生活我在國中的時候練得駕輕就熟、爐火純青,私立學校的舍監變態的狠,想當初我國中還在舍監的寢室看過一張珍重護貝的照片,裡頭是舍監陪伴著已故總統蔣經國先生的閱兵照片。

  那時候舍監肩上的那個梅花可閃亮的狠,要是放在古代那可是禁衛寵將啊!

  話說就算現在說甚麼都沒有用了,既來之則安之。

  操完這些調皮的王八蛋,皇家騎士又開始了他的命令。

  「現在,所有的人,按照鄉鎮排列好,我們會賦予各位一個數字,從今天開始,在這邊,你們沒有名沒有姓,只剩下一串編號,啊是聽懂了沒有!」皇家騎士說著說著,最後一句忽然加重音並且衝到一個奴隸面前使出獨門絕學獅子吼,當場把那個奴隸嚇得剩下一絲絲血皮。


我們一群初新者你看我、我看你,最後按照高矮順序排好,排在排頭的都是天龍特攻隊的,身高沒有190也有180,我這個167的只能在後面苟延殘喘。

  「稚氣俠,我們排在一起好不好?」有一個長的超像陳水扁的鄉民擠來我旁邊,將林坤宏擠走,整個就是很惡霸,讓我很反感。

  「同性戀可以來當兵嗎?」我看著旁邊這個戴眼鏡的小陳水扁,一直將旁邊的鄉民擠走,心中直冒冷汗。

  我雖然說不上玉樹臨風,但也是白白淨淨的玉面小生,他該不會是BL吧?

  我很恐慌、很不爽、很度爛,所以表情很不安。

  為什麼?

  因為我討厭陳水扁,而且剛好「蒼天已死、紅衣當立、歲在雙十、天下圍攻」這個活動結束沒多久,我看到鄰兵長相不憤慨才怪。

  皇家騎士才不管你三七二十一還是二十二,他從第一排開始點,一排4班,我是第二排第一班,也就是第5班。

  「你,他媽的就是63號。」皇家騎士一指,我頓時有被六脈神劍打到的感覺,他媽的威力太強了,害我差點軟腳。

  嗚嗚嗚,從今以後我要捨棄稚氣俠的名,只能當一個編號063的狗。

  林坤宏65號,我跟他隔1號,讓我有種遺憾的感覺,但是當晚上的時候這分感覺卻變成慶幸。

  接下來就是安全檢查,所有人被下令將背包裡面所有東西倒在地上,整個地上琳瑯滿目,讓我目不暇給。

  我的衣服有暗袋,雖然6*6空間袋裡面的零食都被搜刮走,我暗藏在衣服裡面的2*2空間袋卻是滿滿的巧克力。

  檢查完剛好下午3點,所有的人都必須將頭髮剃得一乾二淨,代表去除所有死老百姓的痕跡。

  人活在世代表的就是姓名、衣服、頭髮還有外表這4種,姓名剛剛被去掉了,頭髮現在也要被去掉,衣服這種身外之物我很有覺悟的待會也會被去除。

  這裡將會沒有你的靈魂,只有一串數字,一具行尸走肉的軀殼。

  我們3個排分個兩個部分,第一部分剃光頭,第二部分領裝備,就是海報上面那嶄新精美的裝備。

  這邊要跟各位鄉民說一下,新手村發的裝備耐久度都很低,一不小心裝備就會毀損,因為這些裝備都是遊戲公司回收的23456789不知道多少手的裝備,很骯髒也很噁心。

  我被分到第二部分,首先要領的是臉盆,臉盆大家都是新的,大家可別小看這個臉盆阿,他可是攻擊力與防禦力都高達10的裝備,比起旁邊那堆跟山一樣的新手村特製版迷彩服來說,還高上10倍。

  「幹!他媽的B,是在慢慢挑什麼,哩系逛百貨公司歐!」皇家騎士蔡建勳從門口衝進來,就是獅子吼加六脈神劍。

  正在我面前兩公尺處脫褲子的064一陣緊張,當場被劍氣打中,倒在地上驚天動地的放了個屁「噗~」

  原諒我很不講江湖道義的笑了。

  「你看陳水扁被蔡建勳嚇到還放屁誒。」我戳了戳排在我後面的林坤宏說。

  「噓,魔王蔡在發飆,待會再講辣。」林坤宏眼觀鼻、鼻觀心的保持著鎮靜,但是嘴角隱隱牽動好像忍的快要得內傷,很可憐。

  「幹,他媽的B咧,拎老師夠誒棒臭屁。」皇家騎士看到眼前這一幕,哭笑不得的轉身就走,我覺得他應該回到他們的秘密基地狂笑吧?

  這時候監督我們領裝備的就只有林坤達還有吳俊彥、兩位不知名的騎士,整個氣氛很歡樂,大家都賊賊的笑著。

  「拍謝拍謝,攏係嘿咧班長害地。」064摸摸頭,爬了起來一點也不會不好意思的說道。

  這句話讓我很是欽佩啊,放了屁之後還一點都不會不好意思的非此君莫屬。

  為什麼?

  因為陳水扁也不會不好意思啊。

  這時候我終於體會到了國小生物老師的教誨「樹無皮必死無疑,人無皮天下無敵!」

  從來沒有任何一天讓我對這句話有這麼深刻的體悟。


前面領精美裝備領的很歡樂,由於這些迷彩服都是上古傳承下來的神器,所以破舊甚至毀損這是在所難免。

  誰聽說過上古傳承的神兵利器是嶄新來著的?遊戲公司都騙人啦,什麼十大神兵,拿出軒轅劍來跟我家的菜刀比比看阿。

  我就不信我家的金門菜刀會輸給軒轅劍。

  話題轉回眼前這些鄉民,有些人很……原諒我想不出任何形容詞來形容他們,大部分人試size是脫下褲子穿上迷彩褲,前面有好幾位仁兄連內褲都脫下來,雷倒了一片人。

  小弟從小到大隻看過女人裸體,看東瀛迷片的時候都會忽略赤裸醜陋的男人裸體,第一次看到有人試褲子連內褲都扒下來,臉上佈滿黑線。

  有些騎士想大聲斥責,卻又害羞的轉頭,臉紅紅的跑出去了?

  我心中一陣擔憂。

  「他們……該不會是BL吧?」我暗自冒著冷汗。

  領取的隊伍緩緩的向前進行著,終於輪到我了!

  跟入門的NPC對話確認編號後,領取得到一個嶄新的臉盆、兩雙漆黑防禦0的襪子、兩條白色毛巾、一個攻擊力1的鋼杯、兩條防禦2的白色三角內褲,上述東西遊戲公司很有佛心,並沒有拿前輩的回收再度利用。

  接下來領的就是個人服飾裝備了,在緊迫的時間內我要挑選出適合我的迷彩服四套、運動服兩套、然後試防禦率4的白膠運動鞋及迷彩操課鞋尺寸。

  還好小弟入伍前在運動用品店擔任員工長達一年多,衣服及鞋子的尺寸被我修練成功的「偵查術」一看,立刻一目瞭然。

  我用著極快的速度搶奪著適合我身材的迷彩服及運動服,由於前輩傳說迷彩服很容易髒、被偷,我用迅雷不及掩耳的速度「拿」了五套迷彩服、三套運動服,我的手腕旁邊泛起一陣陣華麗的光芒,我用我練了一年多的摘花折梅手迅速將衣服折好疊在臉盆上,帶著從容的笑意離開。

  水扁兄在我前面三位,當我在最後一關要跟NPC報說我要穿的鞋子尺寸時,他還在試衣服,更驚人的在後頭……

  「063,你要幾號鞋?」NPC不耐煩的問著我。

  「我……我……」我驚訝的說不出話來,手指著NPC斜後方驚訝不語。

  「你什麼你!趕快說!搞什麼鬼!」這位不知名的騎士NPC轉過頭去,嚇得罵了句髒話。

  「他媽的B咧,會不會太誇張?」只見騎士大人整個臉都黑掉了。

  只見水扁兄脫掉內褲,竟然在試穿剛剛發的白色三角褲,後頭的人目瞪口呆,我想,應該雷倒了很多鄉民。

  我瞥了一眼,就立刻掉頭選了我要的尺寸,摟著整堆裝備走出去,實在太不堪入目了……

  一路上我還唸著「阿彌佗佛……罪過罪過。」

  領完裝備要在旅館前的空地,大家皆稱之的「連集合場」排隊等待去除三千煩惱絲。

  我已經做好萬全的準備,昨天特地跑去台中找認識多年的辣妹設計師小妞將我理了個大光頭。

  我還依稀記得她這樣跟我說的。

  「哈哈哈,要當兵了!阿兵哥呷饅頭呷得牙齒黑溲溲。」這樣的恥笑讓我很台不起頭。

  言猶在耳不見人,聲容宛在耳邊縈。

  我很是感慨,一邊排著隊等帶著剪頭髮,當輪到我的時候,我才知道為什麼破關的英雄都說,入伍前就要剪好頭髮。

  那髮婆的電棒幾乎跟電腦裡面的CPU一樣熱,而且時間緊迫,每個人剪的時間不超過三分鍾,我看很多沒做功課的鄉民、想保持帥氣長髮的蟀鴿,最後剪完頭髮時候,HP血量都不超過10。

  很可憐「所謂工欲善其事,必先利其器」,這句話不是要說給那些髮婆聽的,而是沒做好準備進來的鄉民,他們就只能帶著萎頓的表情殘破的身軀,滿頭都是血的入列。

  「他媽的這到底有沒有愛滋啊?」我看隔壁髮婆那把不知道被點到加幾,附魔幾百次現在卻飽飲紅血的理髮電棒,心中一陣膽寒。

  我的頭髮極短,髮婆意思意思在頭髮上空揮舞幾下,就收手而歸,換下一位奴隸來,我繳交了30元,卻交的很是雀躍。

  「還好沒碰到那血跡斑斑的武器,不然會不會被感染,遊戲公司也不敢做保證吧?」我心中一陣得意。


我雖然沒有剪到頭毛,可是還是得幫前面的林昆弘把他頭上的煩惱絲弄乾淨,我爽快的替他倒上些爽身粉,拿起髮婆準備好的烤肉刷,將林昆弘的頭髮撥弄乾淨。

  還在剪頭髮的水扁兄,我到現在還不知道他叫什麼名字,他一直重複大喊著「63號63號等等幫我撥頭髮!」

  我假裝沒有聽到,剪完頭髮趕緊跑回旅館前空地坐下來枯等。

  果然沒錯,那傢伙喊沒幾下,皇家騎士倐地忽然不知道從哪個陰暗的角落一竄而出,一個排山倒海的翔龍十八掌就賞在水扁兄的腦袋上。

  「閉嘴!你他媽的是長胸部還是沒雞雞!吵吵吵,哩係紮沒郎歐!哩娘咧。」皇家騎士一陣不知道哪部經書的咒語把所有的人嚇得一聲不吭。

  「我覺得他現在一定超恨皇家騎士而不是恨秋意。」我為此下了個註解,旁邊的人都不敢應和我,大夥默默的點了點頭。

  像陳水扁的64號頓時被打的焉了,他剪完頭髮,由林昆弘幫他把頭髮弄乾淨,他就站在那邊等他下一位。

  那是一個頭髮很日系的猛男,我剛進來新手村的時候就很注意這號人物,這廝膽子很大,再這一片出家的祥和光海中,他一個人比梁鶴群還要鶴立雞群,頭髮造型跟傑尼斯那些人有的拼。

  「他媽的B咧,他以為他是視覺系還是在拍太空戰士8?哩娘咧。」皇家騎士恨恨的罵了句,那個很不鄉的帥鴿還狠狠的瞪他一眼。

  「哇靠,那傢伙膽子還比孫悟空還要大!」旁邊不知道哪一班的小小聲的說著。

  我也深有體會的點頭,我估計,不出幾秒,這傢伙定要吃苦頭,63號很傻很天真的在旁邊拿著烤肉刷上下飛舞,好像在趕蚊子,沒人注意到他。

  戰役,一觸擊發。

  「啊啊啊啊啊……痛痛痛啊吼嗚伊哩嚕晡……嗚嗚嗚……」髮婆嘴邊盪起溫柔的笑意,讓所有剪完&未剪完的弟兄看得膽顫心驚。

  或許,當年扮成小紅帽奶奶的大野狼也是這樣笑的?

  那帥鴿刻意抹上髮臘的髮型中間一片狼籍,那樣子就好像德軍當年的坦克大軍輾過巴黎凡爾賽宮玫瑰園的籬笆,畫面是那麼的血腥殘暴透露出一絲絲的悲悽。

  嗯,是悲悽,不是北七。

  在這個網路遊戲中,如果你不能對自己狠,別人就會對你更狠,這句話不知道哪一個修成正果的前輩悟到的。

  我覺得很有道理,那個視覺系男人一吼之下驚天動地,皇家騎士早就準備好一條不知道從哪來的黑色布塊從旁邊塞進去他的嘴巴,嘴角牽起一股怵目驚心的笑容。

  初新者訓練,萬惡的遊戲公司下令給所有的新手村,務必狠狠打擊所有初新者的氣焰。

  這種規矩,只要腦袋不像是地球一樣臭氧層破洞,應該都知道才對啊?

  我很狐疑,怎麼會有人去挑戰遊戲公司呢?

  「這傢伙是不是米蟲online玩太久還是腦袋有什麼隱疾之類的?」後面一個不知道是誰的推了推我的後背,悄悄的問我,我偷偷轉頭小小聲的說不知道。

  他哭了,我笑了,我在走進新手村之前,聽說過很多遠古的傳說,只要有人被盯上,那代表你的日子會好過一點。

  我想,我今後的日子有這些英雄前仆後繼的挑戰騎士的威嚴,我就當個安分的螻蟻吧!

  所謂螻蟻尚且偷生,這好好的人不做,有人要去當畜牲然後以為自己是英雄是救世主,那就莫怪我們把他們當成墊腳石了。

  「做人要做博客來,別做墊腳石。」母親從小總是這樣教誨我的。

-------------------------------------------- 以上


以上文章轉貼自 雅瑪文閣 ,是一個追小說的好地方,我也常去爬文

http://220.228.153.69/novel_board/boardw.asp?b_id=59690



2009年2月6日 星期五

C# 讀取Excel 欄位-2

因為還沒找到 如何將 文字、數字 正確讀出的方法,所以換了一種做法,
利用 dataGridView 來做處理。



















using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; //有使用到SQL
using System.Data.OleDb; //有使用到Excel
using System.IO;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)
{



if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
FileInfo fi = new FileInfo(openFileDialog1.FileName);
if (!fi.Exists)
{
MessageBox.Show("匯入檔案並不存在", "注意", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFileDialog1.FileName + ";Extended Properties='Excel 8.0;IMEX=1;'";
OleDbConnection Conn = new OleDbConnection(strConn);
try
{
Conn.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}

try
{
DataSet ds = new DataSet();

DataTable dt = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
if (dt.Rows[0]["TABLE_Name"].ToString().IndexOf("$") < 0)
{
dt.Rows[0]["TABLE_Name"] += "$";
}
string strSelect = "Select * From [" + dt.Rows[0]["TABLE_Name"].ToString() + "] ";
OleDbDataAdapter da = new OleDbDataAdapter(strSelect, strConn);

da.Fill(ds, dt.Rows[0]["TABLE_Name"].ToString());
da.Dispose();

ds.Tables[dt.Rows[0]["TABLE_Name"].ToString()].Rows.RemoveAt(0);

dataGridView1.DataSource = ds.Tables[dt.Rows[0]["TABLE_Name"].ToString()];
label1.Text = ds.Tables[0].Rows.Count.ToString(); //取得資料比數
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
Conn.Close();
Conn.Dispose();
}
}

C# 讀取Excel 欄位

其實主要要做是將 Excel 內容讀入到 資料庫(SQL),可是因為 Excel 表格並不是統一的
所以再讀入 SQL 之前,必須要先處理過。

目前第一步 試著將 Excel 讀入到 C# 表單內,以供後續處理。

//讀取 C:\qq.xls 檔案內資料至 MessageBox
listBox1.Items.Clear();
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\qq.xls;Extended Properties=\"Excel 8.0;HDR=NO\"";
//HDR 是用來判斷 Excel 第一欄標題
OleDbConnection cn = new OleDbConnection();
cn.ConnectionString = sConnectionString;
cn.Open();

string sSQL = "SELECT * FROM [Sheet1$]";
OleDbCommand cmd = cn.CreateCommand();
cmd.CommandText = sSQL;
OleDbDataReader DR = cmd.ExecuteReader();
while (DR.Read())
{
listBox1.Items.Add(DR[0] + "," + DR[1] + "," + DR[2]);
}

cn.Close();

目前遇到的問題是,如果 Excel 內容裡面有包含 數字、文字 時(同一行)
那麼會沒有辦法讀出 數字。。 目前正在想辦法。。


下面這種寫法跟上面的一樣....只是換了不同敘述而已
也不能解決 文字和數字 並存。。。
//讀取 C:\qq.xls 檔案內資料至 MessageBox
string path = "c:\\QQ.xls";
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = " + path + ";Extended Properties='Excel 8.0;HDR=NO'";
OleDbConnection objConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM [Sheet1$] ";
objConn.Open();

OleDbDataAdapter objCmd = new OleDbDataAdapter(strCom, objConn);
DataSet objDS = new DataSet();
objCmd.Fill(objDS);
objConn.Close();

for (int i = 0; i < objDS.Tables[0].Rows.Count; i++)
{
//listBox1.Items.Add(objDS.Tables[0].Rows[i][1].ToString());
listBox1.Items.Add(objDS.Tables[0].Rows[i][0] + "," + objDS.Tables[0].Rows[i][1].ToString() + "," + objDS.Tables[0].Rows[i][2].ToString());
}

2009年2月5日 星期四

遠傳 3.5G 老是斷線。。

話說 上個月跟同事聊天,談到網路的事情,由於我外出工作 家裡面辦了Hinet 2M ADSL
一直閒置著,每週回去才弄一下,心理是覺得有點可惜。。

剛好說到 3.5G 網卡,週末回去以後 馬上就跑去辦了。

我申請的是 遠傳吃到飽 775 + 7-11 禮券 1000 的案子,搭配 HUAWEI E219 型號。。

兩年約。。 -__-|||

以我個人使用 1 個月的經驗來看,跟 2M ADSL 來比,開網頁的時候會有點頓頓的,
使用 HINET 網站下載測速約是 50K~130 K (130K 算是 Peek 啦,再來沒有更高了).

曾使用的紀錄:
台中 西屯區 HSDPA (3.5G訊號)
桃園 機場附近 WCDMA (3G訊號)
宜蘭 羅東 GPRS (2G訊號)
花蓮 光復糖廠 GPRS (2G訊號)
台東 知本溫泉 GPRS (2G訊號)
高雄 岡山 HSDPA (3.5G訊號)
彰化 鹿港街上 WCDMA (3G訊號)

其實遠傳官方網站 有各地方涵蓋率可以查詢的,不過 上述都是我親身體驗。。
基本上 你看到GPRS 就可以把電腦關機了,連 Yahoo 首頁 都能開到斷線了

再來就是,如果看到 HSDPA 訊號。。也不用太高興。。

下圖是正在下載的截圖。。(都有 3.5G 訊號了,速度竟然才 7X K....真是無言!
所以,奉勸各位有想要辦理 3.5G 網卡的人,請先 "試用看看" 不然會後悔死!

2009年2月2日 星期一

list index out of bounds(3)問題發生如何解決?

最近執行 System Process 時,發現會有錯誤訊息跳出。

list index out of bounds(3) , 主要發生原因是系統啟動時有空索引

網路上爬了一下文,找到了解決辦法。

開始-->執行-->Msconfig


果然找到了最後一行有空的執行啟動項目。
將 勾勾 取消,重開機果然沒再發生了。

2009年1月22日 星期四

如何開機時 自動連網路磁碟機?

剛好碰上 Client 必須要同步備份 Server端 某資料夾,但是網路又經常斷線
所以趕快弄了一下,具體步驟如下:

環境:Windows XP
開啟-->執行-->輸入CMD Enter

------------------------------------------------
COPY CON GO.BAT
NET CONFIG SERVER /AUTODISCONNECT:-1
NET USE Z: /DEL
NET USE Z: \\192.168.0.1\DATASOURCE 密碼 /user:Administrator
『按一下鍵盤上方的 F6 按鍵』
-------------------------------------------------

完成後會產生一個 GO.BAT 的批次檔案
做個捷徑丟到 開始-->程式集-->啟動 裡面。

以後開機就會出現 Z 槽的網路磁碟機了。

下面說明一下用意:
NET CONFIG SERVER /AUTODISCONNECT:-1 (設定電腦閒置網路磁碟機不中斷)
NET USE Z: /DEL (連線之前先刪除,避免被使用)
NET USE Z: \\192.168.0.1\DATASOURCE (將區域網路上某個目錄 連接到 本機 Z 槽)

以上

我的寶貝猛男!!

有小孩的感覺真的很好,有時候工作累了,想一想他 就覺得很開心、愉快!






這個應該是 11 個月大的時候,
最喜歡翻箱倒櫃的,什麼東西都要翻出來。

令人無奈。。



















逗他笑的時候!

















別誤會了。。其實 他是想要人家抱他~











第一次騎小車車。。不過呢 車子是向後退的..

2009年1月21日 星期三

C# 刪除Process內程式

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string ProcessName = "notepad"; //大小寫有差,不需要副檔名
Process[] MyProcess = Process.GetProcessesByName(ProcessName);

if (MyProcess.Length != 0) //檢查是不是有找到
{
// listBox1.Items.Add(MyProcess[0].ProcessName); 如果有 Listbox1 可以顯示出來是砍了那個 Procss
MyProcess[0].Kill();
}


}

}
}

C# 將進行中程式結束關閉

自己試了一下,有點像是 Form 表單右上角的 X 一樣的功能。

System.Environment.Exit(System.Environment.ExitCode);

可以用在複數表單上來關閉。

有人知道比較詳細的部分嗎?

2009年1月15日 星期四

C# 資料庫比數計算

label5.Text = km.Tables[0].Rows.Count.ToString(); //取得資料比數

用來取得 資料庫比數

C# Timer 事件用法


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
timer1.Interval = 1000; //這樣的用法會每 1 秒跑去 檢查條件
timer1.Start(); //開始跑
//timer1.Stop();
}


//由於 timer1.Interval = 1000 (1秒),所以每1秒會執行一次 Timer_Tick
private void timer1_Tick(object sender, EventArgs e)
{
DateTime qq = new DateTime();

//顯示現在日期、時間、秒數....
label6.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

}



C# Debug 利器,可以在『輸出』視窗觀看

System.Diagnostics.Debug.Print(qq.Hour.ToString()); //Debug 利器,輸出視窗
// () 內表示用法如同 Messbox 用法相同

如何將 Outlook 郵件 匯出 至 Outlook Express ?

因為最近 Outlook 發生了很多神奇的事情。。
例如 E-Mail 老是重複收到兩封。。
例如 每次開啟 Outlook 老是說我沒有正常關閉。。(我發誓我有!)

所以一狠心要把 Outlook 信件 整個轉移到 Outlook Express..

方法也很簡單,開啟 Outlook Express 後,點選 『檔案--> 匯入--> 郵件』



然後他會全部匯入。。當然你也可以針對某些 資料夾來匯入..

比較可惜的是,通訊錄的轉移沒辦法匯入,只能自己手動慢慢建立了。
看看網路上高手是不是有辦法。。。殘念!!


另外 我比較了一下容量大小,大約是 Outlook 有壓縮效果吧,比較小。

Outlook Express 1.6GB
Outlook 1.01GB

以上

Firefox 套件 『ScribeFire』可以直接發佈文章

剛剛爬文看到的,馬上下載來試用看看。。
這篇文章就是使用『ScribeFire'套件來發佈的。。

用起來很直接、很方便,可以不需要登入 Blog ..不需要輸入 帳號、密碼
只是會有點擔心 。。我的帳號、密碼不會外洩吧!! ^_^|||

試用一陣子看看吧!

2009年1月14日 星期三

C# 類別的優點(很像 巨集)

//類別的建構
class file
{
//類別的屬性
string filename="";

//建構子
public file( )
{
filename="c:\\1.txt";
}

public file(string fn)
{
filename=fn;
}

//方法的使用
public string open( )
{
string aa;
System.IO.StreamReader fn = new System.IO.StreamReader(filename, Encoding.Default);
while (fn.EndOfStream == false)
{
Application.DoEvents(); //這一行是強制 逐步執行
aa = aa + fn.ReadLine();
}
return aa;
}

public string write()
{

}


}


file xx= new file("c:\66.txt" );
msgbox( xx.open());

C# 類別、建構子、方法

//類別的建構
class ABC
{
//類別的屬性
int c=0;
int d=0;
string e="";

//建構子(名稱一定和 類別名稱相同)
public ABC( )
{
d=1;
c=2;
}

public ABC(int i )
{
d=1;
c=i;
}

public ABC(int i,string j , int k )
{
c=i;
e=j;
d=k;
}

//方法的使用
public string PLAY( )
{
c++;
d++;
return d;
}

public string PLAY2(int i )
{
c=c+i;
return c.tostring;
}
}

ABC xx = new ABC(4 );
msgbox( xx.PLAY2(6 ));

C# 順序載入檔案(FORM)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;


namespace _20090105_開機順序載入程式
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

//當開啟"表單後",自動讀入檔案 將 setup.ini 內容讀至 listbox1
private void Form1_Activated(object sender, EventArgs e)
{

System.IO.StreamReader fn = new System.IO.StreamReader("setup.ini", Encoding.Default);
while (fn.EndOfStream == false)
{
Application.DoEvents(); //這一行是強制 逐步執行
string aa = fn.ReadLine();
listBox1.Items.Add(aa);
System.Threading.Thread.Sleep(500);

//開始執行 讀入Listbox1 內檔案路徑
System.Diagnostics.Process km = new System.Diagnostics.Process();
km.StartInfo.FileName = aa.ToString();
km.StartInfo.UseShellExecute = true; //非執行檔也可以使用,若false則指定 執行檔才能執行
if (km.StartInfo.FileName != "")
{
km.Start();
}

//Delay 的用法,比Timer 方便,直接就可以停止,待時間結束 往下一行
System.Threading.Thread.Sleep(3000);
}
fn.Close();
this.Close(); //關閉表單
}

}
}

C# 順序載入檔案(主控台)

using System;
using System.Collections.Generic;
using System.Text;

namespace _20090107_開機自動開啟_setup.ini_程式_主控台模式_
{
class Program
{
static void Main(string[] args)
{
System.IO.StreamReader fn = new System.IO.StreamReader("setup.ini", Encoding.Default);
while (fn.EndOfStream == false)
{

string aa = fn.ReadLine();

System.Threading.Thread.Sleep(500);

//開始執行 讀入Listbox1 內檔案路徑
System.Diagnostics.Process km = new System.Diagnostics.Process();
km.StartInfo.FileName = aa.ToString();
km.StartInfo.UseShellExecute = true; //非執行檔也可以使用,若false則指定 執行檔才能執行
if (km.StartInfo.FileName != "")
{
km.Start();
}

//Delay 的用法,比Timer 方便,直接就可以停止,待時間結束 往下一行
System.Threading.Thread.Sleep(3000);
}
fn.Close();
//Console.WriteLine("pause"); //就是 Messbox
}
}
}

C# 順序載入檔案開啟

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;


namespace _20090105_開機順序載入程式
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

//Delay 的用法,比Timer 方便,直接就可以停止,待時間結束 往下一行
// System.Threading.Thread.Sleep(3000);

}

private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;


}


private void button2_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
textBox2.Text = openFileDialog1.FileName;
}

private void button3_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
textBox3.Text = openFileDialog1.FileName;
}

private void button4_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
textBox4.Text = openFileDialog1.FileName;
}

private void button5_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
textBox5.Text = openFileDialog1.FileName;
}

private void button6_Click(object sender, EventArgs e)
{
button1.Dispose();
button2.Dispose();
button3.Dispose();
button4.Dispose();
button5.Dispose();
//設置 Timer 的相關資料
System.Timers.Timer tmr = new System.Timers.Timer(10000); //設置間隔時間為10000毫秒
tmr.Elapsed += new System.Timers.ElapsedEventHandler(ok_next); //到達時間的時候執行事件
tmr.AutoReset = false; //設置是執行一次(false)還是一直執行(true)
tmr.Enabled = true; //是否執行System.Timers.Timer.Elapsed事件

//無秒數 Run P1
System.Diagnostics.Process p1 = new System.Diagnostics.Process();
p1.StartInfo.FileName = textBox1.Text.ToString();
p1.StartInfo.UseShellExecute = true; //非執行檔也可以使用,若false則指定 執行檔才能執行
if (p1.StartInfo.FileName != "")
{
p1.Start();
}

}

public void ok_next(object source, System.Timers.ElapsedEventArgs e)
{
//Run P2
System.Diagnostics.Process p2 = new System.Diagnostics.Process();
p2.StartInfo.FileName = textBox2.Text.ToString();
p2.StartInfo.UseShellExecute = true; //非執行檔也可以使用,若false則指定 執行檔才能執行
if (p2.StartInfo.FileName != "")
{
p2.Start();
}

System.Timers.Timer tmr1 = new System.Timers.Timer(10000); //設置間隔時間為10000毫秒
tmr1.Elapsed += new System.Timers.ElapsedEventHandler(ok_next1); //到達時間的時候執行事件
tmr1.AutoReset = false; //設置是執行一次(false)還是一直執行(true)
tmr1.Enabled = true; //是否執行System.Timers.Timer.Elapsed事件
}

public void ok_next1(object source, System.Timers.ElapsedEventArgs e)
{
//Run P3
System.Diagnostics.Process p3 = new System.Diagnostics.Process();
p3.StartInfo.FileName = textBox3.Text.ToString();
p3.StartInfo.UseShellExecute = true; //非執行檔也可以使用,若false則指定 執行檔才能執行
if (p3.StartInfo.FileName != "")
{
p3.Start();

}

System.Timers.Timer tmr2 = new System.Timers.Timer(10000); //設置間隔時間為10000毫秒
tmr2.Elapsed += new System.Timers.ElapsedEventHandler(ok_next2); //到達時間的時候執行事件
tmr2.AutoReset = false; //設置是執行一次(false)還是一直執行(true)
tmr2.Enabled = true; //是否執行System.Timers.Timer.Elapsed事件

}

public void ok_next2(object source, System.Timers.ElapsedEventArgs e)
{
//Run P4
System.Diagnostics.Process p4 = new System.Diagnostics.Process();
p4.StartInfo.FileName = textBox4.Text.ToString();
p4.StartInfo.UseShellExecute = true; //非執行檔也可以使用,若false則指定 執行檔才能執行
if (p4.StartInfo.FileName != "")
{
p4.Start();
}

System.Timers.Timer tmr3 = new System.Timers.Timer(10000); //設置間隔時間為10000毫秒
tmr3.Elapsed += new System.Timers.ElapsedEventHandler(ok_next3); //到達時間的時候執行事件
tmr3.AutoReset = false; //設置是執行一次(false)還是一直執行(true)
tmr3.Enabled = true; //是否執行System.Timers.Timer.Elapsed事件

}

public void ok_next3(object source, System.Timers.ElapsedEventArgs e)
{

//Run P5
System.Diagnostics.Process p5 = new System.Diagnostics.Process();
p5.StartInfo.FileName = textBox5.Text.ToString();
p5.StartInfo.UseShellExecute = true; //非執行檔也可以使用,若false則指定 執行檔才能執行
if (p5.StartInfo.FileName != "")
{
p5.Start();
}

//MessageBox.Show("全數執行完畢", "AUTO", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

}
}

C# 資料庫查詢 資料表紀錄

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace _20090107_BCS_資料庫_表單模式_
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//直接撈 TABLE表
private void button2_Click(object sender, EventArgs e)
{

using (SqlConnection aaa = new SqlConnection("Data Source=10.1.1.253;Initial Catalog=BCS;User ID=sa;Password=fuchi4728")) //開啟連線
{
aaa.Open(); //打開
//string q1 = "SELECT * ";
//string q2= " FROM IWK_ACT ";
//string q3 = " WHERE S_NO LIKE 'FT5508A08C0186%'";
//string q5 = q1 + q2 + q3;
string q5 = textBox1.Text;

SqlDataAdapter cc = new SqlDataAdapter(q5.ToString(), aaa);
DataSet km = new DataSet();
cc.Fill(km);
dataGridView1.AutoGenerateColumns = true;
DataGridView kk = new DataGridView();
kk.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView1.DataSource = km.Tables[0];
MessageBox.Show("查詢完了");


}

}
}
}

C# 資料庫查詢 基本指令用法

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace _20090107_BCS_資料庫_表單模式_
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//單獨撈的時候
private void button1_Click(object sender, EventArgs e)
{
using (SqlConnection aaa = new SqlConnection("Data Source=10.1.1.253;Initial Catalog=BCS;User ID=sa;Password=fuchi4728")) //開啟連線
{
//做之前清資料
int dd_count = 0;
listBox1.Items.Clear();


aaa.Open(); //打開
SqlCommand ss = new SqlCommand("SELECT * FROM IWK_ACT WHERE S_NO='FT5508A08C0188U2426503'", aaa); //命令
SqlDataReader dd = ss.ExecuteReader(); //讀取
while (dd.Read())
{

listBox1.Items.Add(dd["S_NO"] + " " + dd["FUNCTION_"]);
dd_count++;
}
MessageBox.Show("查詢完了");
label1.Text = dd_count.ToString();
}



}



}
}

C# 讀檔、開檔、存檔

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace 讀入TXT檔案至TEXTBOX
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)
{
//先清空之前的資料
listBox1.Items.Clear();
listBox2.Items.Clear();
listBox3.Items.Clear();

//檔案對話方塊,只選檔案而已,沒有讀入
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
if (openFileDialog1.FileName.IndexOf("DCN") == -1)
{
MessageBox.Show("死小古,你選錯檔案了\n\n你應該選擇由 DCN 開頭的檔案", "你選錯了");
return;
}
int qq1 = 0;
int qq2 = 0;
//按下按鈕 讀入檔案 將 textbox1內容 讀至 listbox1
System.IO.StreamReader fn = new System.IO.StreamReader(textBox1.Text, Encoding.Default);
while (fn.EndOfStream == false)
{

string aa = fn.ReadLine();

listBox1.Items.Add(aa);
//判ok到 listbox2
if (aa.IndexOf("PANEL ID OK") >= 0)
{
listBox2.Items.Add(aa);
qq1++;

}
//判NG到 listbox3
if (aa.IndexOf("Panel ID Not Found") >= 0)
{
listBox3.Items.Add(aa);
qq2++;
}
}
fn.Close();
//將數量秀出
label4.Text = qq1.ToString();
label5.Text = qq2.ToString();
}
//將 Listbox3 NG內容 存至固定位置.


private void button2_Click(object sender, EventArgs e)
{

//選擇目錄
saveFileDialog1.ShowDialog();
textBox3.Text = saveFileDialog1.FileName;

if (textBox3.Text == "")
{
MessageBox.Show("請選擇目錄,小古!");
return;
}

//Save
System.IO.StreamWriter fn = new System.IO.StreamWriter(textBox3.Text);
for (int fu = 0; fu < path =" new" text =" path.SelectedPath;" text ="=" qq1 =" 0;" qq2 =" 0;" qq3 =" 0;" qq4 =" 0;" text =" qq1.ToString();" text =" qq2.ToString();">= 0)
{
listBox1.Items.Add(xx);
//將listbox1 內檔案順序開到 listbox2 (OK),listbox3(NG)
System.IO.StreamReader fcc = new System.IO.StreamReader(xx, Encoding.Default);
while (fcc.EndOfStream == false)
{

string bb = fcc.ReadLine();

//判ok到 listbox2
if (bb.IndexOf("PANEL ID OK") >= 0)
{
listBox2.Items.Add(bb);
qq3++;

}
//判NG到 listbox3
if (bb.IndexOf("Panel ID Not Found") >= 0)
{
listBox3.Items.Add(bb);
qq4++;
}
}
fcc.Close();
//將數量秀出
label4.Text = qq3.ToString();
label5.Text = qq4.ToString();
}
}
}
}
}

[OTHER] 解決 硬碟變成 RAW 格式的方法





最近碰到一個問題,某作業站是


需要持續寫入大量資料做儲存,


儲存的方式是利用區域網路連接


到網路硬碟,剛好這個硬碟又壞了。
























將硬碟裝上其他電腦之後,開完機 一看狀態果然變成 RAW 了。。。




上 Google 爬文一下,發現有很多都是介紹


使用 EasyRecovery 這套軟體。。




安裝後,執行救援。。。因為硬碟很大,有500 GB 跑了一天終於跑完了。。


結果不能抓檔案(殘念!!),原因是因為試用版。。




最後找到 黑X版 EasyRecovery 6.10 簡體版本,終於成功救援。




不過要記得,掃瞄的模式是要選成 『高級』的模式才有辦法救援,簡單模式下雖然可以找的到


檔案,可是卻無法下載。