none
關於正規化去切割字串 RRS feed

  • 一般討論

  • 誰知道空字串該怎麼用正規化表示?

    例如某筆資料是

    1,AAAAAAAA      ,A0:A0:A0:A0:A0:A0   ,2010/12/4,2010/12/5,台北,陳某,Y
    2,BBBBBBBB      ,B1:B1:B1:B1:B1:B1   ,2010/12/4,,,,

     

    那該怎麼用正規化去切呢?

    第1行的切法,我會寫

    但是第2行的卡在有空字串的欄位

    我實驗不出來

    實驗用的工具在
    http://www.codeproject.com/KB/dotnet/regextutorial.aspx


    player
    2011年1月14日 上午 11:25

所有回覆

  • 您好

    您目前怎麼寫的,是要用什麼條件來切割? 空字串會造成什麼影響?


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年1月14日 下午 12:06
    版主
  • 看起來資料沒有什麼特別之處, 如果只是要取得 ',' 之間的資料可以參考 String.Split 方法

    並視需求搭配 StringSplitOptions 列舉型別 一起使用


    chhuang - There's more than one way to do it.
    2011年1月17日 上午 01:09
  • Hi,

    如小克大所述

    若String.Split無法處理

    一定要用Regex的話

    你必須知道Regex有Match、Replace、Split三種模式可以使用

    也許你應該用的是Split而非Match


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年1月18日 上午 05:21
  • 誰知道空字串該怎麼用正規化表示?

    你可以使用 ? 去做判斷。但是在你所述的情況中, 對於空字串的情況, 你也可以先把一行字串以 string.split(',') 切成幾段, 取出來的個別字串如果符合 string.IsNullOrWhiteSpace 刖跳過。我會建議你切段處理會比較容易, 拿一整行去做驗證通常是自找麻煩, 這是我的經驗。

    關於 Regular Expression, 建議你看一下這一篇: http://www.dotblogs.com.tw/johnny/archive/2010/01/25/13301.aspx


    ASP.NET 2Share - http://www.dotblogs.com.tw/johnny
    2011年1月18日 下午 05:44
  • \s  這種, 確定無法判別出空字串欄位

     

    我原本預期每一攔位都有資料

    用下面這樣去切字串的( csv檔, 整個檔案讀入至字串, 再用正規化去自動化切割欄位出來)

    ([a-zA-Z0-9]+),([a-zA-Z0-9_\-\.\s]+),([a-zA-Z0-9_\-\.\s/:]+),([a-zA-Z0-9_\-\./]+),([a-zA-Z0-9_\-\./]+),([\u2E80-\u9FFF]+),([\u2E80-\u9FFF]+),([a-zA-Z0-9]+)

    這還有別種解法嗎?
    下面這是我用在ASP.NET的頁面上

    protected void Button1_Click(object sender, EventArgs e)
        {
            //Request.Files

            if (FileUpload1.PostedFile.FileName.ToLower().IndexOf(".csv") <= 0)
            {
                this.Label1.Text = "無法處理這種檔案, 請確認必須為純文字的 .csv 檔";
                return;
            }

            if (FileUpload1.PostedFile.ContentLength <= 0)
            {
                this.Label1.Text = "無法處理這種檔案, 請確認檔案不為空Size";
                return;
            }


            int Length = FileUpload1.PostedFile.ContentLength;
            Byte[] buffer = new Byte[Length];
            FileUpload1.PostedFile.InputStream.Read(buffer, 0, Length);

            int nCount = 0;
            string strText = System.Text.Encoding.GetEncoding(950).GetString(buffer);


            string pat = @"([a-zA-Z0-9]+),([a-zA-Z0-9_\-\.\s]+),([a-zA-Z0-9_\-\.\s/:]+),([a-zA-Z0-9_\-\./]+),([a-zA-Z0-9_\-\./]+),([\u2E80-\u9FFF]+),([\u2E80-\u9FFF]+),([a-zA-Z0-9]+)";

            // Instantiate the regular expression object.
            Regex r = new Regex(pat, RegexOptions.IgnoreCase);

            // Match the regular expression pattern against a text string.
            Match m = r.Match(strText);


            string strDBServer = "localhost";
            string strDB = "myTestDb";


            ClassSQL objSql = new ClassSQL(strDBServer, strDB);
            using (SqlConnection conn = objSql.OpenConnection())
            {
                string str1;
                string str2;
                string str3;
                string str4;
                string str5;
                string str6;
                string str7;
                string str8;
                string strSql;

                while (m.Success)
                {
                    str1 = m.Groups[1].Value.Trim();
                    str2 = m.Groups[2].Value.Trim();
                    str3 = m.Groups[3].Value.Trim();
                    str4 = m.Groups[4].Value.Trim();
                    str5 = m.Groups[5].Value.Trim();
                    str6 = m.Groups[6].Value.Trim();
                    str7 = m.Groups[7].Value.Trim();
                    str8 = m.Groups[8].Value.Trim();

                    nCount++;

                    strSql = string.Format(
                       "exec [dbo].[sp_DataUpdate] {0},{1},{2},{3},{4},{5},{6},{7}",
                       SafeSQL.Quote(str1), SafeSQL.Quote(str2), SafeSQL.Quote(str3), SafeSQL.Quote(str4),SafeSQL.Quote(str5), SafeSQL.Quote(str6), SafeSQL.Quote(str7), SafeSQL.Quote(str8));

                    objSql.ExecuteNonQuery(strSql);

                    m = m.NextMatch();
                }
            }



            this.Label1.Text = string.Format("已更新{0}筆資料", nCount);
        }


    player
    2011年1月19日 上午 08:16
  • Hi,

    不是跟你說了可用Split?!

    若用Match...依你的Patten把+改*就可以了

    ([a-zA-Z0-9]*),([a-zA-Z0-9_\-\.\s]*),([a-zA-Z0-9_\-\.\s/:]*),([a-zA-Z0-9_\-\./]*),([a-zA-Z0-9_\-\./]*),([\u2E80-\u9FFF]*),([\u2E80-\u9FFF]*),([a-zA-Z0-9]*)


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年1月21日 上午 01:16