关于解析.csv文件的一个算法

     不知道大家用.csv文件的时候多不,我是第一次用,下面是我写的一个解析算法,效率比较低,欢迎大家指导!
     在写算法之前,我先用一个例子说下.csv文件的格式:
     自己随便写的一个字符串    aa, bb, cc,"kkk"常常  以","为分割符,
     要说明的是 aa 是一列, bb是一列, cc,"kkk"常常 是一列  共三列,
     其中第三列比较特殊其中包含一个","和一个" ",  
     当你用.net从这个.csv文件里读取这个.csv文件的时候,你得到的会是 aa,bb,"cc,""kkk常常""" 规则是如果一列中本身包含"," 这列外边要用" "引起来,如果列本身包含" "要在" "外边要牵套一个" "
     下面这个算法就是把读出来的 aa,bb,"cc,""kkk常常""" 还原为aa, bb, cc,"kkk"常常
     
      public string StrConvert(string str)
        {
            try
            {
                StringBuilder strBulid = new StringBuilder();
                int number1 = 0;  //对"计数的变量
                int number2 = 0;  //这个是对"一个标志位,如果当前字符串为",+1,如果下一个字符串不为",赋值为0
                foreach (Char c in str)
                {
                    if (c != '\"' && c != ',')
                    {
                        number2 = 0;
                        strBulid.Append(c);
                    }
                    else if (c == ',' && number1 % 2 == 0)
                    {
                        strBulid.Append(" ");//把","替换为空格,为了以后用空格进行拆飞(对这个有点疑问我,不知道对不)
                        number2 = 0;
                    }
                    else if (c == ',' && number1 % 2 == 1) //如果","是一列内部不进行替换
                    {
                        strBulid.Append(c);
                        number2 = 0;
                    }
                    else if (c == '\"')
                    {
                        number2 += 1;
                        number1 += 1;
                        if (number2%2==0) //只取""中的第一个
                        {
                            strBulid.Append(c);
                        }
                    }
                }
                if (number1 % 2 == 1)
                {
                    Console.WriteLine("源文件有误!");
                    strBulid = null;
                }
                return strBulid.ToString();
            }
            catch (Exception exp)
            {
                Console.WriteLine(exp.Message);
                return null;
            }
        }

posted on 2008-05-31 16:51  极度  阅读(325)  评论(0)    收藏  举报

导航