c# - 如何拆分列可能包含逗号的csv

标签 c# .net 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

如何使用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, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

最佳答案

使用 Microsoft.VisualBasic.FileIO.TextFieldParser 类。这将处理分隔文件、TextReaderStream 的解析,其中一些字段用引号引起来,而另一些则没有。

例如:

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";

TextFieldParser parser = new TextFieldParser(new StringReader(csv));

// You can also read from a file
// TextFieldParser parser = new TextFieldParser("mycsvfile.csv");

parser.HasFieldsEnclosedInQuotes = true;
parser.SetDelimiters(",");

string[] fields;

while (!parser.EndOfData)
{
    fields = parser.ReadFields();
    foreach (string field in fields)
    {
        Console.WriteLine(field);
    }
} 

parser.Close();

这将导致以下输出:

2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34

参见 Microsoft.VisualBasic.FileIO.TextFieldParser获取更多信息。

您需要在“添加引用 .NET”选项卡中添加对 Microsoft.VisualBasic 的引用。

关于c# - 如何拆分列可能包含逗号的csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33776723/

相关文章:

c# - 在 MVVM 应用程序中存储应用程序设置/状态的位置

c++ - 使用单声道从 C/C++ 调用 C#

php - 在插入之前验证 CSV 数据的有效性以及 CSV 文件名,如果中间存在错误/丢失数据,则不要插入到数据库

c# - WCF Web 服务序列化错误 - 返回空值

c# - 如何使用 C# 应用程序查询 MS Access 数据库?

c# - 如何获取成员(member)的全名

Java SuperCSV CsvBeanReader 尽管出现错误仍继续

python - 将多个 DBF (csv) 文件合并为一个,沿列附加

for 循环中的 C# 错误

c# - 在什么情况下 Process.Start() 方法会返回 false?