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

游北亮
博客专家认证
2008-01-04 12:39:58
如果用Excel 编辑CSV文件,且内容中有逗号,得到的csv文件内容如下:
"aaa,aaa",bbb,ccc

此时用C#读入csv文件,用split(',')就会出问题,求教这种情况下应该如何处理CSV文件呢?
...全文
2134 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianghao123ronghua 2012-04-13
  • 打赏
  • 举报
回复
MatchCollection mc = Regex.Matches(str, @"[^,]*""[^""]*""[^,]*|[^,]+");

这正则可否改下,把空也取出来?谁会帮帮忙
怪怪 2011-07-25
  • 打赏
  • 举报
回复
我的问题和这个差不多,只是我还没看懂大家说的.
我还说说我的吧:
我也是向csv中写入,比如我写入的是一条短信,中间包含逗号.
要怎样做才能不让csv把短信中的逗号当做是它的分隔符来处理呢?
whut_lcy 2010-05-24
  • 打赏
  • 举报
回复
good!
root_ 2008-01-07
  • 打赏
  • 举报
回复
前几天一直不能上网,今天才搞定

这是处理单行数据的,多行循环处理一下
string str = "\"aaa,\",bbb,ccc"; 
MatchCollection mc = Regex.Matches(str, @"[^,]*""[^""]*""[^,]*|[^,]+");
foreach (Match m in mc)
{
Console.WriteLine(m.Value);
}
eyesinbook 2008-01-07
  • 打赏
  • 举报
回复
先把说明,就是带引号的SubString取出来存入,再把剩下的部分Split可以不/?
vicqqq 2008-01-07
  • 打赏
  • 举报
回复
        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));
}
yuzhlhua 2008-01-07
  • 打赏
  • 举报
回复
mark
游北亮 2008-01-07
  • 打赏
  • 举报
回复
楼上的确实基本可以,但是下面的内容就不行了
str = "\"aaa,\",bbb,ccc";
第一个元素会变成 aaa
逗号丢了

顶一下,求更好的解决方案。
changjiangzhibin 2008-01-04
  • 打赏
  • 举报
回复
up,sf
游北亮 2008-01-04
  • 打赏
  • 举报
回复
不知道用OleDB读取会不会有问题,回头试试,请告知除OleDB方法以外的 办法。
lsj_zrp 2008-01-04
  • 打赏
  • 举报
回复
一个方法:
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;
}
要达到""""两个双引号可能楼主要自己该一下
游北亮 2008-01-04
  • 打赏
  • 举报
回复
正常的数据如下,用Excel编辑后储存为CSV格式(2个双引号表示一个双引号):

品名,价格,说明
显示器,1100,"三星牌,710F,3台"
U盘,1200,"爱国者1个,""杂牌""3个"
电话机,1300,飞利普

我要取出每行的“品名,价格,说明”3项,存入数据库。
游北亮 2008-01-04
  • 打赏
  • 举报
回复
比如csv文件内容是:
"aaa,aaa",bbb,ccc

那么我要得到
aaa,aaa
bbb
ccc
上面3个字符串,并存入数据库,这就是我的目的。
root_ 2008-01-04
  • 打赏
  • 举报
回复
没看出来你要如何分割,分割的结果如何

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

现在要的只是例子和对应的结果,至于能不能实现或是如何实现,先不用管

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧