怎么解析字段里本来就含逗号的csv文件

需要做一个解析csv文件,然后把各字段插入数据库中的表的功能,可某些字段里本来就有逗号,所以不能用把每行split逗号来取,改怎么办呢?有木有高手啊?

作者: princess911   发布时间: 2011-06-16

先把逗号替换了。

作者: tang688   发布时间: 2011-06-16

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

作者: tang688   发布时间: 2011-06-16

这样的csv文件本身就是非法的,何谈解析?

你用Excel保存一个带逗号数据的表为csv看看。应该用引号括起来的。

作者: caozhy   发布时间: 2011-06-16

to tang688:

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

作者: princess911   发布时间: 2011-06-16

to tang688:

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

作者: princess911   发布时间: 2011-06-16

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

作者: caozhy   发布时间: 2011-06-16

to caozhy:

用户本来就是用Excel输入然后另存为csv文件的(或者让用户另存为其它格式更好处理?),然后我需要用VB程序去解析这个csv文件.

有逗号的字段会用引号括起来,可是并不是每个字段都有逗号,所以不能用引号加逗号来split每一行.很想找到个便捷的方式来解析这个文件,数据的例子如下:

user name,company name,profile
apple,apple company,iphone,
abc,"ABC CO.,LTD",test,

作者: princess911   发布时间: 2011-06-16

我暂时使用了第一种方案,我告诉用户csv是以逗号分隔来取字段的,所以字段不能含有逗号,我告诉用户在解析前需要他们替换逗号成/(和tang688所说的替换成中文逗号是一个意思), 可我感觉这样做好愚蠢,应该有更好的方法吧..

(2)的话对于我们的程序肯定更好处理,比如1-10位是第一个字段,11-50位是第二个字段..
可这样用户不太好进行原始数据的输入,不好操作...

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

作者: princess911   发布时间: 2011-06-16

不需要手工解析。

直接借助数据库引擎读取。

Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Text;HDR=NO';Data Source=yourfile.csv

作者: caozhy   发布时间: 2011-06-16

ADO会吧?

作者: caozhy   发布时间: 2011-06-16

DAO Data access object?

作者: princess911   发布时间: 2011-06-16

大佬,不知道改怎么用呢....

使用这个东东就直接把数据导入到一个表中了吗?

引用 9 楼 caozhy 的回复:
不需要手工解析。

直接借助数据库引擎读取。

Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Text;HDR=NO';Data Source=yourfile.csv

作者: princess911   发布时间: 2011-06-16

曾经也遇到过同样的问题。
要保存逗号的话,必须在“”里面才行。
这样的话,自能自己解析了,“”里面的逗号不能作为逗号分割了。

不是很多,不过要考虑一下要保存“的时候怎么办,“”里面的“必须是两个换一个。
就像c里面的\
代码不是很多的.
自己写吧.
祝你好运.

作者: jiangtao1978   发布时间: 2011-06-16