问题描述
给定
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#将上述信息拆分成字符串如下:
210167/31/2008 14:22杰夫·达尔加斯2011 年 6 月 5 日 22:21http://stackoverflow.com科瓦利斯,或767935181b437f461b3fd27387c5d8ab47a293d3534
如您所见,其中一列包含 , <= (Corvallis, OR)
更新
string[] result = Regex.Split(samplestring, ",(?=(?:[^"]*"[^"]*")*[^"]*$)");
使用 Microsoft.VisualBasic.FileIO.TextFieldParser
类.这将处理对分隔文件的解析,TextReader
或 Stream
其中一些字段用引号括起来,有些则不是.
例如:
使用 Microsoft.VisualBasic.FileIO;字符串 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));//也可以从文件中读取//TextFieldParser parser = new TextFieldParser("mycsvfile.csv");parser.HasFieldsEnclosedInQuotes = true;parser.SetDelimiters(",");字符串[] 字段;while (!parser.EndOfData){字段 = parser.ReadFields();foreach(字段中的字符串字段){Console.WriteLine(field);}}parser.Close();
这应该会产生以下输出:
210167/31/2008 14:22杰夫·达尔加斯2011 年 6 月 5 日 22:21http://stackoverflow.com科瓦利斯,或767935181b437f461b3fd27387c5d8ab47a293d3534参见 Microsoft.VisualBasic.FileIO.TextFieldParser 了解更多信息.
您需要在添加引用 .NET"选项卡中添加对 Microsoft.VisualBasic
的引用.
Given
2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,"Corvallis, OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34
How to use C# to split the above information into strings as follows:
2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
As you can see one of the column contains , <= (Corvallis, OR)
update
Based onC# Regex Split - commas outside quotes
string[] result = Regex.Split(samplestring, ",(?=(?:[^"]*"[^"]*")*[^"]*$)");
Use the Microsoft.VisualBasic.FileIO.TextFieldParser
class. This will handle parsing a delimited file, TextReader
or Stream
where some fields are enclosed in quotes and some are not.
For example:
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();
This should result in the following output:
2 1016 7/31/2008 14:22 Geoff Dalgas 6/5/2011 22:21 http://stackoverflow.com Corvallis, OR 7679 351 81 b437f461b3fd27387c5d8ab47a293d35 34
See Microsoft.VisualBasic.FileIO.TextFieldParser for more information.
You need to add a reference to Microsoft.VisualBasic
in the Add References .NET tab.
这篇关于如何拆分列可能包含的 csv,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!