CSV文件内容中有逗号,用Split的问题 如果用Excel 编辑CSV文件,且内容中有逗号,得到的csv文件内容如下:"aaa,aaa",bbb,ccc此时用C#读入csv文件,用split(',')就会出问题,求教这种情况下应该如何处理CSV文件呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道用OleDB读取会不会有问题,回头试试,请告知除OleDB方法以外的 办法。 比如csv文件内容是:"aaa,aaa",bbb,ccc 那么我要得到aaa,aaabbbccc上面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; }要达到""""两个双引号可能楼主要自己该一下 楼上的确实基本可以,但是下面的内容就不行了str = "\"aaa,\",bbb,ccc";第一个元素会变成 aaa逗号丢了顶一下,求更好的解决方案。 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可以不/? 前几天一直不能上网,今天才搞定这是处理单行数据的,多行循环处理一下string str = "\"aaa,\",bbb,ccc"; MatchCollection mc = Regex.Matches(str, @"[^,]*""[^""]*""[^,]*|[^,]+");foreach (Match m in mc){ Console.WriteLine(m.Value);} 我的问题和这个差不多,只是我还没看懂大家说的.我还说说我的吧:我也是向csv中写入,比如我写入的是一条短信,中间包含逗号.要怎样做才能不让csv把短信中的逗号当做是它的分隔符来处理呢? MatchCollection mc = Regex.Matches(str, @"[^,]*""[^""]*""[^,]*|[^,]+");这正则可否改下,把空也取出来?谁会帮帮忙 从数据库里读二进制图片,然后保存成图放到一个目录下 C#初学者 c# winform 读xml问题??reader.Value怎么是空 发送传真问题? 关于dataGrid的两个问题!狂着急!在线等 关于一个利用Socket进行文件传输的问题,跟大家讨论讨论!~ 请问,用vb.net或者vc.net写的代码在C#中可以使用吗? WPF绑定的集合,在值更新时为什么不通知源 C#读取三菱FX PLC treeview 问题???? WinForm DataTable 问题 如何保存当前窗体为图片?
"aaa,aaa",bbb,ccc 那么我要得到
aaa,aaa
bbb
ccc
上面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;
}
要达到""""两个双引号可能楼主要自己该一下
str = "\"aaa,\",bbb,ccc";
第一个元素会变成 aaa
逗号丢了顶一下,求更好的解决方案。
{
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));
}
string str = "\"aaa,\",bbb,ccc";
MatchCollection mc = Regex.Matches(str, @"[^,]*""[^""]*""[^,]*|[^,]+");
foreach (Match m in mc)
{
Console.WriteLine(m.Value);
}
我还说说我的吧:
我也是向csv中写入,比如我写入的是一条短信,中间包含逗号.
要怎样做才能不让csv把短信中的逗号当做是它的分隔符来处理呢?