怎么解析字段里本来就含逗号的csv文件 我是说在保存到csv之前,替换成全角的逗号 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样的csv文件本身就是非法的,何谈解析?你用Excel保存一个带逗号数据的表为csv看看。应该用引号括起来的。 to tang688:现在用户的数据是英文的,所以是英文的逗号.比如公司名: ABC CO.,LTD to tang688:所以用户不愿意替换成中文的逗号. (1)将你非法的csv变成合法的(2)既然你不遵循csv的格式,你需要自己设计一种格式约定。你必须消除这种二义性。 to caozhy:用户本来就是用Excel输入然后另存为csv文件的(或者让用户另存为其它格式更好处理?),然后我需要用VB程序去解析这个csv文件.有逗号的字段会用引号括起来,可是并不是每个字段都有逗号,所以不能用引号加逗号来split每一行.很想找到个便捷的方式来解析这个文件,数据的例子如下:user name,company name,profileapple,apple company,iphone,abc,"ABC CO.,LTD",test, 我暂时使用了第一种方案,我告诉用户csv是以逗号分隔来取字段的,所以字段不能含有逗号,我告诉用户在解析前需要他们替换逗号成/(和tang688所说的替换成中文逗号是一个意思), 可我感觉这样做好愚蠢,应该有更好的方法吧..(2)的话对于我们的程序肯定更好处理,比如1-10位是第一个字段,11-50位是第二个字段..可这样用户不太好进行原始数据的输入,不好操作... 不需要手工解析。直接借助数据库引擎读取。Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Text;HDR=NO';Data Source=yourfile.csv DAO Data access object? 先用split分成各项,再从前到后遍历每项,如果开头有双引号就手动连接到一起直到某项末尾有双引号。 其实也很简单,先用 " 号分割,然后找出含 "," 的项,再整个替换,将 "," 替换成其他符号,就可用 "," 来进行 Split 了,写入数据段时,再替换回 "," /// <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)); } 求一个网络控制软件 如何删除字符串间字符 VBA 声明了一个public变量,如何给它赋值? VB导出EXCEL版本兼容问题 在已知数据库中怎么创建数据表??? 如何求出本机的系统盘符? Bom表的建立 继续开发中的问题,请高手一如既往!在线等 如何获取网络上其他计算机时间 To: fishzone(阿愚)及其他高手(uguess及Amoon等) 用modem发短信,如何判断modem已经发送完毕,可以发送下一条短信? vb对webbrowser弹出对话框发送一个“回车”
(2)既然你不遵循csv的格式,你需要自己设计一种格式约定。
你必须消除这种二义性。
apple,apple company,iphone,
abc,"ABC CO.,LTD",test,
可这样用户不太好进行原始数据的输入,不好操作...
再从前到后遍历每项,如果开头有双引号就手动连接到一起直到某项末尾有双引号。
/// 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));
}