我尝试拆分的记录格式如下:
987,"This is second field, it contains multiple commas, but is enclosed in quotes, 88123, 99123", 1221, lastfield
我正在使用代码:
char[] delimiters = new char[] {',' };
string[] parts = line.Split(delimiters, StringSplitOptions.None);
我得到拆分结果,但它不会将引号分隔字段视为一个字段。我需要得到4个字段的结果,但是每个逗号都有一个字段。如何调整/更改代码以获得我需要的结果?
答案 0 :(得分:0)
string.Split()
对此不够强大。您将需要使用正则表达式(在C#中,Regex
类)。
答案 1 :(得分:0)
@Tavya是正确的,String.Split
不适合你,因为它不处理引用的行。有许多方法可以为这个众所周知的猫提供方法,包括使用正则表达式或使用Google搜索中可以找到的众多CSV解析器之一。
另一个简单的方法是使用VisualBasic的TextFieldParser
类。只需将项目中的引用放入Microsoft.VisualBasic.dll并在文件头中使用“Microsoft.VisualBasic.FileIO”即可。然后你可以做这样的事情。
private List<string> parseFields (string lineToParse)
{
//initialize a return variable
List<string> result = new List<string>();
//read the line into a MemoryStream
byte[] bytes = Encoding.ASCII.GetBytes(lineToParse);
MemoryStream stream = new MemoryStream(bytes);
//use the VB TextFieldParser to do the work for you
using (TextFieldParser parser = new TextFieldParser(stream))
{
parser.TextFieldType = FieldType.Delimited;
parser.Delimiters = new string[] { "," };
parser.HasFieldsEnclosedInQuotes = true;
//parse the fields
while ( parser.EndOfData == false)
{
result = parser.ReadFields().ToList();
}
}
return result;
}
结果将是:
987
这是第二个字段,它包含多个逗号,但用引号括起来,88123,
991231221
lastfield