4

我试图拆分的记录格式如下:

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 个字段的结果,但每个逗号都有一个字段。如何调整/更改代码以获得所需的结果?

4

2 回答 2

0

string.Split()对此还不够强大。您将需要使用正则表达式(在 C# 中,Regex类)。

于 2013-07-18T18:51:03.920 回答
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、99123

1221

上场

于 2013-07-18T19:24:54.603 回答