我是说在保存到csv之前,替换成全角的逗号

解决方案 »

  1.   

    这样的csv文件本身就是非法的,何谈解析?你用Excel保存一个带逗号数据的表为csv看看。应该用引号括起来的。
      

  2.   

    to tang688:现在用户的数据是英文的,所以是英文的逗号.比如公司名: ABC CO.,LTD
      

  3.   

    to tang688:所以用户不愿意替换成中文的逗号.
      

  4.   

    (1)将你非法的csv变成合法的
    (2)既然你不遵循csv的格式,你需要自己设计一种格式约定。
    你必须消除这种二义性。
      

  5.   

    to caozhy:用户本来就是用Excel输入然后另存为csv文件的(或者让用户另存为其它格式更好处理?),然后我需要用VB程序去解析这个csv文件.有逗号的字段会用引号括起来,可是并不是每个字段都有逗号,所以不能用引号加逗号来split每一行.很想找到个便捷的方式来解析这个文件,数据的例子如下:user name,company name,profile
    apple,apple company,iphone,
    abc,"ABC CO.,LTD",test,
      

  6.   

    我暂时使用了第一种方案,我告诉用户csv是以逗号分隔来取字段的,所以字段不能含有逗号,我告诉用户在解析前需要他们替换逗号成/(和tang688所说的替换成中文逗号是一个意思), 可我感觉这样做好愚蠢,应该有更好的方法吧..(2)的话对于我们的程序肯定更好处理,比如1-10位是第一个字段,11-50位是第二个字段..
    可这样用户不太好进行原始数据的输入,不好操作...
      

  7.   

    不需要手工解析。直接借助数据库引擎读取。Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Text;HDR=NO';Data Source=yourfile.csv
      

  8.   

    DAO Data access object?
      

  9.   

    先用split分成各项,
    再从前到后遍历每项,如果开头有双引号就手动连接到一起直到某项末尾有双引号。
      

  10.   

    其实也很简单,先用 " 号分割,然后找出含 "," 的项,再整个替换,将 "," 替换成其他符号,就可用 "," 来进行 Split 了,写入数据段时,再替换回 ","
      

  11.   

    /// <summary>
            /// wgr 重新处理单元格中的英文逗号,避免前面的用逗号分隔出现的换格问题
            /// </summary>
            /// <param name="strdata"></param>
            /// <returns></returns>
            public string[] SplitStr(string strdata)
            {
                strdata = strdata.Replace("\r", "");
                if(!strdata.EndsWith("\r")&&!strdata.EndsWith(","))
                {
                    strdata += ",";
                }
                ArrayList cells = new ArrayList();
                string str = "";
                bool flag = false;
                for (int i = 0; i < strdata.Length; i++)
                {
                    char ch = strdata[i];
     
                    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));
            }