1.前言
將DataTable經由過濾,排序得到新的資料表。
2.說明
提供兩個方法,一種是將DataTable轉成DataView,利用DataView的RowFilter及Sort方法得到所需資料,然後再將DataView轉成DataTable。
另一種方法是利用DataTable.Select().CopyToDataTable()方式得到資料表。
private DataTable DataTableFilterSort(DataTable oTable, string filterExpression, string sortExpression)
{
DataView dv = new DataView();
dv.Table = oTable;
dv.RowFilter = filterExpression;
dv.Sort = sortExpression;
DataTable nTable = dv.ToTable();
return nTable;
}
private DataTable DataTableFilterSort(DataTable oTable, string filterExpression, string sortExpression)
{
DataTable nTable = oTable.Select(filterExpression, sortExpression).CopyToDataTable();
return nTable;
}
3.應用
DataTable oTable = GetDataTable("cars");
DataTable nTable = DataTableFilterSort(oTable, "SPEED='10'", "DIST asc");
dataGridView1.DataSource = nTable;
搜尋此網誌
2014年10月22日 星期三
2014年10月20日 星期一
判斷字串中是否有中文字
Demo Code Ver. :.NET Framework 4.0
最近做一個小功能,要判斷傳入字串是否含有中文,再作後續的動作。這邊記錄判斷邏輯的寫法,程式的邏輯
為當傳入參數只要是字串中有任何一個中文字都會回傳True
謝謝Allen kuo指正,小弟這邊有一個地方沒有考慮到,應該還要多考慮一個中文的Unicode範圍,這樣才會精準
Unicode字元範圍
3400~4DFFh:中日韓認同表意文字擴充A區,總計收容6,582個中日韓漢字。
4E00~9FFFh:中日韓認同表意文字區,總計收容20,902個中日韓漢字。
A000~A4FFh:彝族文字區,收容中國南方彝族文字和字根。
AC00~D7FFh:韓文拼音組合字區,收容以韓文音符拼成的文字。
F900~FAFFh:中日韓兼容表意文字區,總計收容302個中日韓漢字。
FB00~FFFDh:文字表現形式區,收容組合拉丁文字、希伯來文、阿拉伯文、中日韓直式標點、小符號、半角符號、全角符號等。
public static bool isChinese(string strChinese)
{
bool bresult = true;
int dRange = 0;
int dstringmax=Convert.ToInt32("9fff", 16);
int dstringmin=Convert.ToInt32("4e00", 16);
for (int i = 0; i < strChinese.Length; i++)
{
dRange = Convert.ToInt32(Convert.ToChar(strChinese.Substring(i, 1)));
if (dRange >= dstringmin && dRange <dstringmax )
{
bresult = true;
break;
}
else
{
bresult = false;
}
}
return bresult;
}
驗證結果程式
Console.WriteLine(isChinese("中文").ToString());
Console.WriteLine(isChinese("Chinese").ToString());
Console.WriteLine(isChinese("AA中").ToString());
必須要考慮到unicode範圍才會正確
最近做一個小功能,要判斷傳入字串是否含有中文,再作後續的動作。這邊記錄判斷邏輯的寫法,程式的邏輯
為當傳入參數只要是字串中有任何一個中文字都會回傳True
謝謝Allen kuo指正,小弟這邊有一個地方沒有考慮到,應該還要多考慮一個中文的Unicode範圍,這樣才會精準
Unicode字元範圍
3400~4DFFh:中日韓認同表意文字擴充A區,總計收容6,582個中日韓漢字。
4E00~9FFFh:中日韓認同表意文字區,總計收容20,902個中日韓漢字。
A000~A4FFh:彝族文字區,收容中國南方彝族文字和字根。
AC00~D7FFh:韓文拼音組合字區,收容以韓文音符拼成的文字。
F900~FAFFh:中日韓兼容表意文字區,總計收容302個中日韓漢字。
FB00~FFFDh:文字表現形式區,收容組合拉丁文字、希伯來文、阿拉伯文、中日韓直式標點、小符號、半角符號、全角符號等。
public static bool isChinese(string strChinese)
{
bool bresult = true;
int dRange = 0;
int dstringmax=Convert.ToInt32("9fff", 16);
int dstringmin=Convert.ToInt32("4e00", 16);
for (int i = 0; i < strChinese.Length; i++)
{
dRange = Convert.ToInt32(Convert.ToChar(strChinese.Substring(i, 1)));
if (dRange >= dstringmin && dRange <dstringmax )
{
bresult = true;
break;
}
else
{
bresult = false;
}
}
return bresult;
}
驗證結果程式
Console.WriteLine(isChinese("中文").ToString());
Console.WriteLine(isChinese("Chinese").ToString());
Console.WriteLine(isChinese("AA中").ToString());
必須要考慮到unicode範圍才會正確
2014年10月19日 星期日
C# 讀取和寫入.TXT
進行寫入動作
using System;
using System.IO;
class Test
{
public static void Main()
{
// Create an instance of StreamWriter to write text to a file.
// The using statement also closes the StreamWriter.
using (StreamWriter sw = new StreamWriter("TestFile.TXT")) //小寫TXT
{
// Add some text to the file.
sw.Write("This is the ");
sw.WriteLine("header for the file.");
sw.WriteLine("-------------------");
// Arbitrary objects can also be written to the file.
sw.Write("The date is: ");
sw.WriteLine(DateTime.Now);
}
}
}
讀取動作
using System;
using System.IO;
class Test
{
public static void Main()
{
try { // Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader("TestFile.TXT")) //小寫TXT
{
String line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
catch (Exception e)
{
// Let the user know what went wrong.
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
}
using System;
using System.IO;
class Test
{
public static void Main()
{
// Create an instance of StreamWriter to write text to a file.
// The using statement also closes the StreamWriter.
using (StreamWriter sw = new StreamWriter("TestFile.TXT")) //小寫TXT
{
// Add some text to the file.
sw.Write("This is the ");
sw.WriteLine("header for the file.");
sw.WriteLine("-------------------");
// Arbitrary objects can also be written to the file.
sw.Write("The date is: ");
sw.WriteLine(DateTime.Now);
}
}
}
讀取動作
using System;
using System.IO;
class Test
{
public static void Main()
{
try { // Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader("TestFile.TXT")) //小寫TXT
{
String line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
catch (Exception e)
{
// Let the user know what went wrong.
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
}
CLR在過去60秒一直無法從COM內容
原因為程式碼有大量的迴圈運算
因此編譯器"提醒"說會長時間沒有回應(因為要算很久)
按下"繼續"即可
或是想將ContextSwitchDeadlock的提醒關掉
可以從 偵錯(D) > 例外狀況(X) > Managed Debugging Assistants
將 ContextSwitchDeadlock 的勾勾去掉
因此編譯器"提醒"說會長時間沒有回應(因為要算很久)
按下"繼續"即可
或是想將ContextSwitchDeadlock的提醒關掉
可以從 偵錯(D) > 例外狀況(X) > Managed Debugging Assistants
將 ContextSwitchDeadlock 的勾勾去掉
2014年10月17日 星期五
[C#] 計算字串的長度方式
怕之後年紀大會忘記,趕緊記下來先
.NET Framework 中有內建類別(Encoding )取得字串的長度
想要取得字串中是否含有中文字串的實際長度,有下列作法
Ⅰ、Length:取得目前 String 物件中字元的數目,僅計算字串長度(中文 2 byte,英文 1 byte)
Ⅱ、GetByteCount:計算編碼一組字元所產生的位元組數目(判斷多少位元組會編碼一組 Unicode 字元)
Ⅲ、GetBytes:計算解碼位元組序列所產生的字元數目(執行實際的編碼作業)
PS:記得先參考 System.Text
《範例》
.NET Framework 中有內建類別(Encoding )取得字串的長度
想要取得字串中是否含有中文字串的實際長度,有下列作法
Ⅰ、Length:取得目前 String 物件中字元的數目,僅計算字串長度(中文 2 byte,英文 1 byte)
Ⅱ、GetByteCount:計算編碼一組字元所產生的位元組數目(判斷多少位元組會編碼一組 Unicode 字元)
Ⅲ、GetBytes:計算解碼位元組序列所產生的字元數目(執行實際的編碼作業)
PS:記得先參考 System.Text
《範例》
string myString = "讓你媽媽NEW一下";
// Length
Response.Write("Length:" + myString.Length);
// GetByteCount:使用目前系統的編碼方式
Response.Write("GetByteCount:" + Encoding.Default.GetByteCount(myString));
// GetBytes
Response.Write("GetBytes:" + Encoding.Default.GetBytes(myString).Length.ToString());
int myStringCount = 0;
for (int i = 0; i < myString.Length; i++)
{
byte[] tIntByte = Encoding.Default.GetBytes(myTextBoxText.Substring(i, 1));
// 中文字
if (tIntByte.Length == 2)
{
//To Do Something
}
myStringCount += tIntByte.Length;
}
Response.Write("GetBytes(FOR):" + myStringCount.ToString());
《結果》
另外需要注意的一點,如果你是使用 GetBytes 計算字串長度的話
需要注意網頁編碼的方式,有可能因為編碼方式的不同,使用 GetBytes 時會有不同的結果
所以如果取得的字串長度跟你想像中的有差異,可以檢查看看網頁編碼的方式喔!
《範例》
Response.Write("GetBytes(big5):" + Encoding.GetEncoding("big5").GetBytes(myString).Length.ToString());
Response.Write("GetBytes(utf-8):" + Encoding.GetEncoding("utf-8").GetBytes(myString).Length.ToString());
《結果》
2014年10月16日 星期四
全形半形轉換
///<summary>
///字串轉全形
///</summary>
///<param name="input">任一字元串</param>
///<returns>全形字元串</returns>
private static string ToWide(string input)
{
//半形轉全形:
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
//全形空格為12288,半形空格為32
if (c[i] == 32)
{
c[i] = (char)12288;
continue;
}
//其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248
if (c[i] < 127)
c[i] = (char)(c[i] + 65248);
}
return new string(c);
}
///<summary>
///字串轉半形
///</summary>
///<paramname="input">任一字元串</param>
///<returns>半形字元串</returns>
private static string ToNarrow(string input)
{
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char)(c[i] - 65248);
}
return new string(c);
}
///字串轉全形
///</summary>
///<param name="input">任一字元串</param>
///<returns>全形字元串</returns>
private static string ToWide(string input)
{
//半形轉全形:
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
//全形空格為12288,半形空格為32
if (c[i] == 32)
{
c[i] = (char)12288;
continue;
}
//其他字元半形(33-126)與全形(65281-65374)的對應關係是:均相差65248
if (c[i] < 127)
c[i] = (char)(c[i] + 65248);
}
return new string(c);
}
///<summary>
///字串轉半形
///</summary>
///<paramname="input">任一字元串</param>
///<returns>半形字元串</returns>
private static string ToNarrow(string input)
{
char[] c = input.ToCharArray();
for (int i = 0; i < c.Length; i++)
{
if (c[i] == 12288)
{
c[i] = (char)32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char)(c[i] - 65248);
}
return new string(c);
}
2014年10月8日 星期三
[Oracle] PL/SQL 的常用函數
nvl(expr1,expr2) - 檢查null,回傳參數1 or 2
ex: select nvl('a','b') from dual ==> a
select nvl(null,'b') from dual ==> b
to_number(string1) - 轉換文字型態為數字(varchar to number)
ex: select to_number('234') from dual ==> 234
to_date(string1,[foramt_mark],[nls_language]) - 轉換文字型態為日期格式(varchar to date)
ex: to_date('2009/07/09', 'yyyy/mm/dd') ==> 2009/7/9
to_date('20090709', 'yyyymmdd') ==> 2009/7/9
to_date('200907'),'yyyymm') ==> 2009/7/1
last_day(date1) - 日期月份的最後一天
ex: select last_day(sysdate) from dual ==> 月底,系統本月的最後一天
select last_day(add_months(sysdate,1)) from dual ==> 下個月月底
select last_day(sysdate)+1 from dual ==> 下個月1號
decode(條件, 條件1, 結果1, [條件2, 結果2]... [, default] ) - 條件等於條件1則傳回結果1,條件2則結果2,類似MSSQL 的 Case When應用。
ex: select decode('C','a1','a2','b1','b2','c1') from dual ==> c1
UPDATE UPDDATE= decode(PRICE,InputPRICE,UPDDATE,SYSDATE) ==> 我常用的語法,當輸入價格不同時,才更新Update
cast(column_name as DataType) - 變更欄位資料型態與長度
ex: select cast('1000' as number) from dual
select cast('abc' as varchar2(100)) from dual
instr(string1,string2) - 查詢字串位置
ex: select INSTR('aaabbbcdddeee','c') from dual ==> 7
ex: select nvl('a','b') from dual ==> a
select nvl(null,'b') from dual ==> b
to_number(string1) - 轉換文字型態為數字(varchar to number)
ex: select to_number('234') from dual ==> 234
to_date(string1,[foramt_mark],[nls_language]) - 轉換文字型態為日期格式(varchar to date)
ex: to_date('2009/07/09', 'yyyy/mm/dd') ==> 2009/7/9
to_date('20090709', 'yyyymmdd') ==> 2009/7/9
to_date('200907'),'yyyymm') ==> 2009/7/1
last_day(date1) - 日期月份的最後一天
ex: select last_day(sysdate) from dual ==> 月底,系統本月的最後一天
select last_day(add_months(sysdate,1)) from dual ==> 下個月月底
select last_day(sysdate)+1 from dual ==> 下個月1號
decode(條件, 條件1, 結果1, [條件2, 結果2]... [, default] ) - 條件等於條件1則傳回結果1,條件2則結果2,類似MSSQL 的 Case When應用。
ex: select decode('C','a1','a2','b1','b2','c1') from dual ==> c1
UPDATE UPDDATE= decode(PRICE,InputPRICE,UPDDATE,SYSDATE) ==> 我常用的語法,當輸入價格不同時,才更新Update
cast(column_name as DataType) - 變更欄位資料型態與長度
ex: select cast('1000' as number) from dual
select cast('abc' as varchar2(100)) from dual
instr(string1,string2) - 查詢字串位置
ex: select INSTR('aaabbbcdddeee','c') from dual ==> 7
2014年10月7日 星期二
2014年10月1日 星期三
賦予table使用者權限
grant select,insert,update,delete on paysys.payccs1 to paysys_role;
create synonym pay.payccs1 for paysys.payccs1;
create synonym pay.payccs1 for paysys.payccs1;
訂閱:
文章 (Atom)