用户名: 密码: 忘记密码? 注册
收藏此问题 发表新评论

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

需要做一个解析csv文件,然后把各字段插入数据库中的表的功能,可某些字段里本来就有逗号,所以不能用把每行split逗号来取,改怎么办呢?有木有高手啊?
昵称: princess911  时间: 2011-06-16 22:11:30
先把逗号替换了。
昵称: tang688  时间: 2011-06-16 22:13:22
我是说在保存到csv之前,替换成全角的逗号
昵称: tang688  时间: 2011-06-16 22:14:00
这样的csv文件本身就是非法的,何谈解析?

你用Excel保存一个带逗号数据的表为csv看看。应该用引号括起来的。
昵称: caozhy  时间: 2011-06-16 22:37:22
to tang688:

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

昵称: princess911  时间: 2011-06-16 22:47:05
to tang688:

所以用户不愿意替换成中文的逗号.
昵称: princess911  时间: 2011-06-16 22:47:39
(1)将你非法的csv变成合法的
(2)既然你不遵循csv的格式,你需要自己设计一种格式约定。
你必须消除这种二义性。
昵称: caozhy  时间: 2011-06-16 22:52:07
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 22:53:34
我暂时使用了第一种方案,我告诉用户csv是以逗号分隔来取字段的,所以字段不能含有逗号,我告诉用户在解析前需要他们替换逗号成/(和tang688所说的替换成中文逗号是一个意思), 可我感觉这样做好愚蠢,应该有更好的方法吧..

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

引用 6 楼 caozhy 的回复:
(1)将你非法的csv变成合法的
(2)既然你不遵循csv的格式,你需要自己设计一种格式约定。
你必须消除这种二义性。
昵称: princess911  时间: 2011-06-16 22:58:44
不需要手工解析。

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

Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Text;HDR=NO';Data Source=yourfile.csv
昵称: caozhy  时间: 2011-06-16 23:00:24
ADO会吧?
昵称: caozhy  时间: 2011-06-16 23:00:48
DAO Data access object?

昵称: princess911  时间: 2011-06-16 23:02:54
大佬,不知道改怎么用呢....

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

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

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

Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Text;HDR=NO';Data Source=yourfile.csv
昵称: princess911  时间: 2011-06-16 23:07:06
曾经也遇到过同样的问题。
要保存逗号的话,必须在“”里面才行。
这样的话,自能自己解析了,“”里面的逗号不能作为逗号分割了。

不是很多,不过要考虑一下要保存“的时候怎么办,“”里面的“必须是两个换一个。
就像c里面的\
代码不是很多的.
自己写吧.
祝你好运.
昵称: jiangtao1978  时间: 2011-06-16 23:10:49
testtest
昵称: cqzym1@163.com  时间: 2018-06-25 16:56:39
发表评论
昵称:
内容:
验证: