一尘不染

如何分割其列可能包含的csv,

c#

给定

2,1016,7 /2008分之3114:22,杰夫达尔加斯6
/二千零十一分之五22:21,http://stackoverflow.com
“科瓦利斯,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

如您所见,其中一列包含,<=(科瓦利斯,俄勒冈州)

//更新//基于 C#正则表达式拆分-
引号外的逗号

string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

阅读 318

收藏
2020-05-19

共1个答案

一尘不染

使用Microsoft.VisualBasic.FileIO.TextFieldParser该类。这将处理解析定界文件,TextReader或者Stream某些字段用引号引起来,而有些则没有。

例如:

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/6/2011 22:21
http://stackoverflow.com
俄勒冈州科瓦利斯
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34

有关更多信息,请参见Microsoft.VisualBasic.FileIO.TextFieldParser

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

2020-05-19