C#中分割包含嵌入逗号的CSV列
CSV文件通常使用逗号分隔列。但是,某些列本身可能包含逗号,这在将CSV数据分割成不同的字符串时会带来挑战。
问题:
给定一个CSV行:
<code>2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,"Corvallis, OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34</code>
如何将此行分割成一个字符串数组,确保“Corvallis, OR”文本保留在一个字段中?
解决方案:
提供的正则表达式仅适用于所有逗号都在引号外或引号内的CSV数据。为了解决这个问题,请考虑使用Microsoft.VisualBasic.FileIO
命名空间中的TextFieldParser
类。此类旨在处理分隔文件,其中某些字段用引号括起来,而其他字段则没有。
代码:
<code class="language-csharp">using Microsoft.VisualBasic.FileIO; // ... string csv = "2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,\"Corvallis, OR\",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34"; using (TextFieldParser parser = new TextFieldParser(new StringReader(csv))) { parser.HasFieldsEnclosedInQuotes = true; parser.SetDelimiters(","); while (!parser.EndOfData) { string[] fields = parser.ReadFields(); foreach (string field in fields) { Console.WriteLine(field); } } }</code>
输出:
<code>2 1016 7/31/2008 14:22 Geoff Dalgas 6/5/2011 22:21 http://stackoverflow.com Corvallis, OR 7679 351 81 b437f461b3fd27387c5d8ab47a293d35 34</code>
注意:
使用TextFieldParser
时,需要在“添加引用.NET”选项卡中添加对Microsoft.VisualBasic
的引用。 代码也使用了using
语句来确保TextFieldParser
被正确关闭。
以上是如何在C#中使用嵌入式逗号正确拆分CSV列?的详细内容。更多信息请关注PHP中文网其他相关文章!