2011年1月28日 星期五

asp.net_textbox→SQL→Label(換行符號處理)

在製作表單的時候常常會有一種流程:

1. 使用者利用textbox輸入文字。

2. 按下送出後,存入資料庫中。

3. 利用label秀出內容,讓其他使用者瀏覽。

這樣的情境非常多,幾乎每一個案子都會需要這種簡單的表單功能,

而其中通常會有某些類似"備註"的欄位,讓使用者可以任意的輸入多行文字。

所以理想狀況下,我們必須要忠實呈現輸入的內容,

如果我們在顯示內容時還是使用textbox,則textbox會幫你處理換行的問題,

但如果使用label來顯示內容就會發現,該內容並沒有依照預期的換行顯示。

所以該怎麼做?可以分成兩個部份來說明:

1. 存入MS SQL裡面的換行符號為:CHAR(10)、CHAR(13),

可以利用

SELECT * FROM Table WHERE UserMessage LIKE '%' + CHAR(10) + '%'
來確定是否有換行符號的寫入。

2. 想要在Label裡面出現換行的效果,必須要使用HTML的語法,也就是<br/>。
所以必須要利用取代的方式來改變從資料庫讀取出來的內容:

ShowString.Replace("\r\n", "<br />");

所以,如果你想要在資料庫裡面處理換行就去搜尋CHAR(10),
如果想要在網頁上面換行就搜尋<br/>,
如果想要在程式裡面換行就是搜尋\r\n(C#),
如果與法使用VB就搜尋vbCrLf。

最後附上換行顯示結果:

2011年1月25日 星期二

asp.net_執行Server上的EXE執行檔

依照前篇的敘述,第二個要處理的問題是,如何利用asp.net呼叫Server上的exe執行。

如果查網路資料,會查到很多一模一樣的文章,基本上有兩種方式:

1. 利用ShellExecute來處理。
引用:

using System.Runtime.InteropServices;

宣告:

[DllImport("shell32.dll")]
private static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, Int32 nShowCmd);

程式碼:

string Dir = page.Server.MapPath("~/");
string CmdStr = Dir + "geoidint.exe";
ShellExecute(IntPtr.Zero, "open", CmdStr, "-I" + Dir + "input.txt -G" + Dir + "output.txt", null, 1);

比較需要注意的地方是,如果你跟我一樣需要傳入參數,就在ShellExecute的第四個參數傳入;又如果傳入的參數是檔案路徑,就要看你所執行的EXE檔是怎麼抓的,像我必須傳入完整路徑,所以參數的部分採組合字串的方式。

2. 利用System.Diagnostics.Process來處理。
引用:

using System.Diagnostics;

程式碼:

Process process = new Process();
process.StartInfo.FileName = Dir + "geoidint.exe";
process.StartInfo.Arguments = "-I" + Dir + "input.txt -G" + Dir + "output.txt";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.CreateNoWindow = false;
process.Start();
if (!process.WaitForExit(1000*15))
{
process.Kill();
}

也是一樣注意傳入參數的部份,如果是檔案位置,請確認路徑是否正確。而在我的規劃中,我必須等待呼叫的執行檔將輸出檔產出後,才讀取新產出的輸出檔內容,再回傳到頁面上,所以另外一個需要注意的地方是最後的判斷式process.WaitForExit(1000*15),用處是:在process完成或15秒後往下執行,如果15秒還未執行完,則殺掉這個執行緒。

*在測試的時候,建議先在本機測試,可以正確執行後,在移至伺服器上。以確認出錯時到底是程式問題還是aspnet的權限問題。若權限問題,則將aspnet帳號加入EXE所在資料夾。

asp.net_寫入文字檔(*.txt)(清除原內容與接續原內容)與讀取文字檔

最近有一個需求,需要呼叫別人已經完成的exe檔(轉換程式)。

正常的想法是,在asp.net的頁面上讓使用者輸入需要轉換的值,直接傳入後端EXE檔後,接輸出值再放回頁面上;

但是該EXE檔的輸入參數為"輸入檔檔名"及"輸出檔檔名",

所以程序就變成:
1. 使用者輸入需要轉換的值。
2. 先將該輸入值寫入一個檔案內。
3. 呼叫EXE檔,並帶有輸出、輸入檔名參數。
4. 打開EXE所產製的輸出檔,將其內容讀出,並顯示於頁面上。

流程圖就像是:

-------------------------------------------------
整個流程會遇到三個問題:
1. 如何將資料寫入一個伺服器上的txt檔內。
2. 如何透過asp.net呼叫伺服器上的exe檔,並帶參數給他。
3. 如何讀出伺服器上的txt檔,顯示於頁面。
-------------------------------------------------

首先,第一個:將資料寫入txt檔內
1. 保留原始內容,不斷將新的加在後面。

string Dir = page.Server.MapPath("~/");
StreamWriter sw = File.AppendText(Dir + "input.txt");
sw.WriteLine("第一行");
sw.WriteLine("第二行");
sw.Flush();
sw.Close();

2. 不保留原始內容,每次寫入都是重新開始。

string Dir = page.Server.MapPath("~/");
StreamWriter sw = new StreamWriter(Dir + "input.txt")
sw.WriteLine("第一行");
sw.WriteLine("第二行");
sw.Flush();
sw.Close();

兩個只差在一個是File.AppendText去指定特定檔案Append;另一個則是new一個新的。

--------------------------------------------

然後相對的第三個問題,把伺服器上的txt檔讀出來。

StreamReader MySF = new StreamReader(Dir + "output.xyz", System.Text.Encoding.Default);
value = MySF.ReadToEnd();
MySF.Close();

或是利用單行讀取。

while (!MySF.EndOfStream)
{
value += MySF.ReadLine() + "\r\n"; //讀取單行
}


第二個問題下一篇。

2011年1月24日 星期一

小小大星球公仔!

將將!讓我們一起打倒宇宙機械怪獸吧!

我想要一隻達文西的。 >///////<

2011年1月20日 星期四

jQuery_簡單的選單效果、移動的遮罩、動態的DIV

最近看到一些不錯的版面,加上又正在上jQuery的課程,所以很想用jQuery來試試看可不可以做出希望的效果,做來做去也搞不清楚主題是什麼了。XD

別的人版面當然不能放上來,我只好利用"最專長"的手繪來展示一下:
1. Menu選單在下面的版,上面有一張精美的大圖,重點是當選到各選項時,會有一個類似遮罩的區塊,在大圖上面移動,然後上面帶有一些簡單的文字與圖片。

2. 右邊有一個台灣,上面有許多景點的位置,碰到景點會有一個強調的動畫,然後會跳出一個浮動說明框,左邊的區塊"應該"是隨著景點的點選做更詳盡的說明。

我想,有著簡單的說明配合精美的手繪資料,應該非常清楚我想要做出怎樣的功能吧?

內容包含:
1. 動態增加景點資料(我用DIV)於頁面上。
2. 滑鼠移上景點時,改變title內容及強調景點。
3. 點選圖上的景點,則連接WebService顯示資料庫內的相關資訊於滑鼠坐標處。
4. 滑鼠移到選單上時改變選單圖示,並用一個帶點透明的遮罩顯示相關訊息於頁面上。
5. 當更換選擇的項目時,上述遮罩移動至設定位置。

效果如下:


最近上jQuery的感想就是:jQuery很強大、男丁老師也很強大。 XD

jQuery_取得滑鼠坐標

想要跟滑鼠互動就要取得滑鼠坐標,記載一下語法:

$("#ShowDiv").click(function (event) {
var MouseX = event.pageX;
var MouseY = event.pageY;
)};

整個概念就是,在滑鼠的事件下,傳進event,就可以利用pageX取得X坐標、pageY取得Y坐標。

2011年1月19日 星期三

時間區塊

多少時間算是一個段落?

「我在哇哇哭的時候,...」─ 三年?

「我幼稚園的時候,...」─ 三年?

「我國小的時候,...」─ 六年?

「我國中的時候,...」─ 三年?

「我五專的時候,...」─ 五年?

「我二技的時候,...」─ 二年?

「我在宜蘭的時候,...」─ 七年?

「我研究所的時候,...」─ 兩年?

「我當兵的時候,...」─ 一年?

「我在執行XX專案的時候,...」─ 3~12個月?

一個還在持續累計的時間區塊是「我第一份工作的時候」─ 累計三年...

零零總總累計起來也30年了。

大概就是像下面這感覺....

想想每一個區塊都自以為的累積了一些東西,

但隨著年齡增長,希望每個區塊累積的密度可以"更"大的心就越大。

吊車勾上的區塊現在看起來有點鬆散。

-----------------------------------------------------------

每一個時間區塊的價值,取決於他對於未來區塊的影響;

前陣子跟五專同學吃飯,大家提到了30歲,很多人的講法是「30而立?是30一事無成吧。」

想想,沒有到一事無成,但也想不出什麼爆點,

許多同學還是留在所謂的"土木界",看看我右邊的書櫃,檢視一下這三年買的書,

我早就已經脫離"土木"好久,現在每天在key in一些

長官、外行人、路邊的石頭以及惡魔覺得沒什麼了不起的東西。

所以國小區塊、造成國中泡籃球場的結果、

國中區塊,造成宜蘭唸書的結果、

五專區塊,造成踏入地理資訊的結果、

二技區塊,造成回台北唸研究所的結果、

研究所區塊,造成現在不斷花腦力key in的結果、

現在這個區塊勒?

1108個日子,說長?還好,說短?也不算.....

-----------------------------------------------------------

可能還有1個30年、1.5個30年還是2個30年?

該怎麼疊。

2011年1月13日 星期四

XBox4G + Kinect同綑包

就在12/31日,2010年的最後一天,得了近年來最嚴重的感冒,雖然因為某些原因還是跑來的辦公室,但是終究還是不敵病魔,決定請假回家。

踏著蹣跚的腳步、沉重的身軀發動機車時,玩心突然戰勝病魔,決定先去買想好久的Kinect。

立刻先去傳說中最低價的Costco,看著滿山遍野的WII主機,遍尋不到kinect。
「請問有賣xbox4G加kinect同綑包嗎?」
Costco店員:「現在缺貨喔,不知道什麼時候進貨。」
就這樣.....所以.........

大潤發內湖1店員「4G沒囉,只剩下單賣的」
家樂福內湖1店員「kinect都缺貨囉」
大潤發內湖2店員「只有250G的單主機」
愛買店員「咖內?咖內是什麼?」
家樂福東興2店員「有!拿給你~~~~~咦!不見了?」旁邊「昨天賣掉最後一台」
大潤發市民3店員「那個要1/5才會補貨喔」

最後,來到光華商場......
不抱希望的隨口問問「請問4G同綑包有嗎?」
旁邊也出現一對中年夫婦「請問有xbox4G嗎?
店員:「有」
搶先一步「我買了!」

最後因為身體實在太不舒服了....完全不想比價,直接加買三款遊戲,回家.....

戰利品:
三款遊戲(遊戲是依照網路上的推薦,買了運動大會、舞動全身、型可塑。)+4G同綑包。

4G開箱:送一個體驗的大冒險遊戲,新型主機、Kinect跟無線手把。

隨便拍完兩張照片以後,我就把他們丟在客廳去睡覺了。

------------------------病好了---------------------------
病好已經來到2011年的1月5日了,終於來到我的kinect初體驗,到今天大概累計10小時遊戲時數(時數這麼短,直覺應該不好玩嗎?其實不是,因為連續玩1個多小時就累了)

遊戲心得
1. 大冒險:就是一個體驗kinect的遊戲片,個人認為遊戲性普普通通。但是一定會有XD。

2. 運動大會:共有六種運動(保齡球、排球、桌球、足球、拳擊、田徑)可以玩,這個遊戲性就比大冒險高很多,每一種運動應該都有一些擁護者,我自己是比較喜歡排球跟桌球,排球就四個字「追趕跑跳」,難度調高一點點玩起來就很HIGH,尤其是一直要殺球跟攔網的時候(累);我沒玩過WII之類的拍類遊戲,單就這款的桌球我是覺得挺有趣的,一來一往很有比賽的FU~~~~~。

3. 舞動全身:非常推的遊戲,歌曲眾多,第一首就是有名的「Poker Face」,每首有三種難度,而且有分小段來教學,所以可以慢慢學每一部份該怎麼跳,最後整首串起來,連貫跳的感覺真的很爽XDDDD。

4. 型可塑:就是一款.....瘦身遊戲!XD可以選擇很多種課程,比如說:瘦身、流一點汗、太極、韻律拳擊等大概10來種,螢幕上會有一個教練帶著你做動作,kinect會偵測你有沒有做對,譬如:有些抬腳的運動,你沒抬他就會叫你把腳抬高...= =;每一套課程大概就12-20分鐘。

所以Kinect值得買嗎?只有兩個字「值得」XD,尤其是生重病還跑到第九家才買到更值得....