如果用Excel 编辑CSV文件,且内容中有逗号,得到的csv文件内容如下:
"aaa,aaa",bbb,ccc此时用C#读入csv文件,用split(',')就会出问题,求教这种情况下应该如何处理CSV文件呢?

解决方案 »

  1.   

    不知道用OleDB读取会不会有问题,回头试试,请告知除OleDB方法以外的 办法。
      

  2.   

    比如csv文件内容是:
    "aaa,aaa",bbb,ccc 那么我要得到
    aaa,aaa
    bbb
    ccc
    上面3个字符串,并存入数据库,这就是我的目的。
      

  3.   

    一个方法: 
    string str = "\"aaa,aaa\",bbb,ccc";
            private ArrayList ConvertToArray(string str)
            {
                ArrayList list = new ArrayList();
                string[] strs = str.Split(new string[] { "\"" }, StringSplitOptions.RemoveEmptyEntries);
                for (int i = 0; i <= strs.Length - 1; i++)
                {
                    if (strs[i].ToString().StartsWith(",") || strs[i].ToString().EndsWith(","))
                    {
                        string[] strss = strs[i].ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                        for (int j = 0; j <= strss.Length - 1; j++)
                        {
                            list.Add(strss[j].ToString());
                        }
                    }
                    else
                    {
                        list.Add(strs[i].ToString());
                    }
                }
                return list;
            }
    要达到""""两个双引号可能楼主要自己该一下
      

  4.   

    楼上的确实基本可以,但是下面的内容就不行了
    str = "\"aaa,\",bbb,ccc";
    第一个元素会变成 aaa
    逗号丢了顶一下,求更好的解决方案。
      

  5.   

            public string[] SplitStr(string strdata)
            {
                ArrayList cells = new ArrayList();
                string str = "";
                bool flag = false;
                //strdata = strdata.Replace("\r", "");
                for (int i = 0; i < strdata.Length; i++)
                {
                    char ch = strdata[i];
                    if (ch == '\r')
                    {
                        cells.Add(str);
                        str = "";
                    }
                    else if (ch == ',')
                    {
                        if (!flag)
                        {
                            cells.Add(str);
                            str = "";
                        }
                        else
                            str += ch;
                    }
                    else if (ch == '\"')
                    {
                        if ((++i < strdata.Length) && strdata[i] == '\"')
                        {
                            str += strdata[i];
                        }
                        else
                        {
                            --i;
                            flag = flag ? false : true;
                        }
                    }
                    else
                    {
                        str += ch;
                    }
                }
                return (string[])cells.ToArray(typeof(string));
            }
      

  6.   

    先把说明,就是带引号的SubString取出来存入,再把剩下的部分Split可以不/?
      

  7.   

    前几天一直不能上网,今天才搞定这是处理单行数据的,多行循环处理一下
    string str = "\"aaa,\",bbb,ccc"; 
    MatchCollection mc = Regex.Matches(str, @"[^,]*""[^""]*""[^,]*|[^,]+");
    foreach (Match m in mc)
    {
        Console.WriteLine(m.Value);
    }
      

  8.   

    我的问题和这个差不多,只是我还没看懂大家说的.
    我还说说我的吧:
    我也是向csv中写入,比如我写入的是一条短信,中间包含逗号.
    要怎样做才能不让csv把短信中的逗号当做是它的分隔符来处理呢?
      

  9.   

    MatchCollection mc = Regex.Matches(str, @"[^,]*""[^""]*""[^,]*|[^,]+");这正则可否改下,把空也取出来?谁会帮帮忙