给定
2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,"Corvallis, OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34
如何使用C#将上述信息拆分成字符串,如下所示:
2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
如您所见,其中一列包含,〈=(Corvallis,OR)
基于C# Regex Split - commas outside quotes
string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
9条答案
按热度按时间mznpcxlj1#
使用
Microsoft.VisualBasic.FileIO.TextFieldParser
类。这将处理对分隔文件TextReader
或Stream
的分析,其中一些字段用引号括起来,而另一些字段没有。例如:
这应该会产生下列输出:
如需详细信息,请参阅Microsoft.VisualBasic.FileIO.TextFieldParser。
您需要在“添加引用.NET”选项卡中添加对
Microsoft.VisualBasic
的引用。5kgi1eie2#
现在已经很晚了,但是这对某些人来说是有帮助的。我们可以使用下面的正则表达式。
tyg4sfes3#
我发现如果你在Excel中粘贴csv分隔的文本,并执行“文本到列”,它会要求你提供“文本限定符”。它默认为双引号,这样它就会将双引号内的文本视为文字。我想象Excel通过一次一个字符来实现这一点,如果它遇到“文本限定符”,它会继续前进到下一个“限定符”。你可以自己用一个for循环和一个布尔值来表示你是否在文本内部。
4dbbbstv4#
您可以拆分所有后面有偶数个引号的逗号。
您还想查看
specf
for CSV格式中有关逗号处理的信息。有用链接:
C# Regex Split - commas outside quotes
q8l4jmvw5#
使用像LumenWorks这样的库来阅读CSV,它可以处理带引号的字段,而且由于已经存在了很长时间,总体上可能比你的自定义解决方案更健壮。
egmofgnx6#
当.csv文件可能是逗号分隔的字符串、逗号分隔的引号字符串或两者的混乱组合时,解析.csv文件是一件棘手的事情。我提出的解决方案允许这三种可能性中的任何一种。
我创建了一个方法,分析Csv行(),它从csv字符串返回一个数组。我首先处理字符串中的双引号,方法是将双引号上的字符串拆分成一个名为quotesArray的数组。带引号的字符串.csv文件仅在双引号的数量为偶数时才有效。列值中的双引号应替换为一对双引号(这是Excel的方法)。只要.csv文件满足这些要求,您就可以预期分隔符逗号只出现在双引号对的外部。双引号对内部的逗号是列值的一部分,在将.csv拆分为数组时应忽略。
我的方法将通过只查看quotesArray的偶数索引来测试双引号对之外的逗号。它还将删除列值开头和结尾的双引号。
我的方法的一个缺点是我临时用一个模糊的unicode字符代替了分隔符逗号。这个字符需要非常模糊,它永远不会出现在你的.csv文件中。你可能需要对此进行更多的处理。
aemubtdh7#
我遇到了一个CSV问题,它包含带有引号字符的字段,因此使用TextFieldParser,我得到了以下结果:
StreamReader仍用于逐行读取CSV,如下所示:
irtuqstp8#
使用Cinchoo ETL-一个开源库,它可以自动处理包含分隔符的列值。
输出量:
有关更多信息,请访问codeproject文章。
希望能有所帮助。
tjrkku2a9#
这个问题和它的副本有很多答案。我尝试了this one that looked promising,但发现它有一些bug。我对它进行了大量修改,以便它能通过我所有的测试。
以下是证明其有效的测试方法: