.net拆分 - 没有双引号

时间:2016-02-08 16:28:28

标签: c# vb.net csv

我有一个CSV文件,如下所示:

ID,Name,Address,PhoneNumber
101,Jack,"No 13, HillTop, London",012346789
102,Harry,"No 15, Baker Street London",012346789

我需要读取所有列(逗号分隔)。当我使用split函数时,它也会分割地址。我想分割除双引号地址之外的任何内容。

2 个答案:

答案 0 :(得分:3)

即使您使用的是C#,Microsoft.VisualBasic命名空间中也有一个非常有用的类TextFieldParser。除 using指令外,您还需要添加对项目的引用:

using Microsoft.VisualBasic.FileIO;

然后你可以实现类似如下的内容:

private void Parse()
{
    using (TextFieldParser parser = new TextFieldParser("file.csv")
    {
        HasFieldsEnclosedInQuotes = true,
        Delimiters = new string[] {
            ","
        }
    })
    {
        string[] fields;
        do
        {
            fields = parser.ReadFields();
            PrintResults(fields);
        }
        while (fields != null);
    }
}

private void PrintResults(string[] fields)
{
    if (fields != null)
    {
        foreach (var field in fields)
        {
            Console.Write(string.Concat("[", field, "] "));
        }
        Console.WriteLine();
    }
}

您的案例中HasFieldsEnclosedInQuotes = true的{​​{1}}属性必须设置为实现所需的行为。

我已将您的CSV示例数据放入文件中并作为测试运行。我开始使用的数据是(在一个名为" file.csv"的本地文件中):

TextFieldParser

通过调用上面的ID,Name,Address,PhoneNumber 101,Jack,"No 13, HillTop, London",012346789 102,Harry,"No 15, Baker Street London",012346789 方法,控制台中的结果输出是:

Parse()

答案 1 :(得分:0)

使用建议的解析库的替代方法可以使用REGEX。

解析此字符串所需的表达式,考虑到“xx,xx”情况为(".*"|.*?)(,|$)

在C#中使用它的示例代码:

//preparation
var pattern = @"("".*""|.*?)(,|$)";
var regex = new Regex(pattern);

//for each file line
var text =@"101,Jack,""No 13, HillTop, London"",0123456789";
var matches = regex.Matches(text).Cast<Match>().Select(m=>m.Groups[1].Value);