2012-01-18 70 views
2

我有一个csv文件,从中我将数据获取到表中。 示例: “ABC”,1,“Apple” 要求是字符串将位于配额“”内,并且整数将不带引号。 上面的一行将分成三列。 我正在使用流读取器类使用line.split(',')将行分割成列。这是工作很好,不幸的是我得到了一个文件中的记录,在这样的字符串之间有一个逗号,如这些“ABC,DEF,ghi”,2,“Orange”这些 。 因此,现在他们不是3列而是5列,所有的转换都失败了。 任何人都可以帮助我在C#中编写脚本,它将配额之间的逗号替换为分号,并且不要触摸列之间的逗号。在配额之间用分号替换逗号

谢谢。

+0

你如何在这些字符串中转义''',或者你能指望它们不包含'''? – Nappy 2012-01-18 23:56:02

+0

是文件可能会发生变化,你可能想要创建一个定义文件头布局的枚举..并检查额外的列,我已经在我的最后一个项目上做了这个,否则你将不得不检查每个字符串之后的长度做分裂becasue ABC,DEF,ghi“应该分成3列而不是1,你可以按照我所说的做什么..那么你将不得不连接DEF ghi作为ABC – MethodMan 2012-01-18 23:59:54

回答

3

看起来您的CSV可能符合RFC 4180。使用RFC 4180分析器。其中许多存在。检查这个:http://www.codeproject.com/KB/database/CsvReader.aspx

+0

的一部分我没有使用任何解析器我在ssis – lch 2012-01-18 23:57:56

+0

脚本组件中使用C#自定义脚本,为什么这有一个VB标记如果您使用C# – ChrisPadgham 2012-01-19 03:42:29

2

这个问题是在这里找到答案: Java: splitting a comma-separated string but ignoring commas in quotes

你可以使用相同的正则表达式",(?=([^\"]*\"[^\"]*\")*[^\"]*$)" 并使用C#方法Regex.Split()

+0

您好我没有正则表达式类使用声明我需要使用得到我是一个初学者在C#请裸me – lch 2012-01-19 00:33:48

+0

你确实有一个正则表达式类,你需要添加一个'using System.Text.RegularExpressions' – billinkc 2012-01-19 01:27:20