读书人

CSV文件内容中有逗号用Split的有关问

发布时间: 2012-04-14 17:14:21 作者: rapoo

CSV文件内容中有逗号,用Split的问题
如果用Excel 编辑CSV文件,且内容中有逗号,得到的csv文件内容如下:
"aaa,aaa",bbb,ccc

此时用C#读入csv文件,用split(',')就会出问题,求教这种情况下应该如何处理CSV文件呢?

[解决办法]
up,sf
[解决办法]
没看出来你要如何分割,分割的结果如何

多给几个例子,尽可能考虑可能出现的情况,并给出相应的结果

现在要的只是例子和对应的结果,至于能不能实现或是如何实现,先不用管
[解决办法]
一个方法:
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;
}
要达到""""两个双引号可能楼主要自己该一下
[解决办法]

C# code
        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));        }
[解决办法]
先把说明,就是带引号的SubString取出来存入,再把剩下的部分Split可以不/?
[解决办法]
前几天一直不能上网,今天才搞定

这是处理单行数据的,多行循环处理一下
C# code
string str = "\"aaa,\",bbb,ccc"; MatchCollection mc = Regex.Matches(str, @"[^,]*""[^""]*""[^,]*|[^,]+");foreach (Match m in mc){    Console.WriteLine(m.Value);} 

读书人网 >C#

热点推荐