CsvReader不应用配置

时间:2019-04-05 06:19:56

标签: c# .net-core csvhelper

我正在尝试解析CSV文件,其中某些行用'#'字符注释掉。

我正在使用CsvHelper Configuration类来设置CsvReader的配置。但是,它似乎没有注册,仍在阅读我的注释行作为输入。

var config = new Configuration
{
    Delimiter = ",",
    Comment = '#',
    Quote = '"',
    HasHeaderRecord = false,
};

using (var stream = new StreamReader(filepath))
using (var reader = new CsvReader(stream, config))
{
    while (reader.Read())
    {
        BsonDocument doc = new BsonDocument
        {
            { "A", reader.GetField(0)},
            { "B", reader.GetField(1)},
            { "C", reader.GetField(2).ToLower()},
            { "D", reader.GetField(3)},
            { "E", Convert.ToBoolean(reader.GetField(4))},
            { "F", Convert.ToBoolean(reader.GetField(5))}
        };
    }
}

input.csv文件中的数据示例:

#fieldA,fieldB,fieldC,fieldD,fieldE,fieldF
valueA,valueB,valueC,valueD,true,false
valueA,valueB,valueC,valueD,true,false
#valueA,valueB,valueC,valueD,true,false
valueA,valueB,valueC,valueD,true,false

2 个答案:

答案 0 :(得分:0)

仅以下内容有效。或者,如果它是默认的“#”,则不能明确声明注释字符。

var config = new Configuration
{
   Delimiter = ",",
   //Comment = '#' //this does not work although # is the default
   Comment = Convert.ToChar("#"),
   Quote = '"',
   HasHeaderRecord = false,
   AllowComments = true,
};

答案 1 :(得分:0)

我相信AllowComments = true是关键部分。即使设置了Comment = '#',我也能使它正常工作,但这不是必需的,因为它是默认设置。我不知道文化背景是否会发挥作用。

var config = new Configuration
{
    HasHeaderRecord = false,
    AllowComments = true
};

using (var stream = new StreamReader(filepath))
using (var reader = new CsvReader(stream, config))
{
    while (reader.Read())
    {
        BsonDocument doc = new BsonDocument
        {
            { "A", reader.GetField(0)},
            { "B", reader.GetField(1)},
            { "C", reader.GetField(2).ToLower()},
            { "D", reader.GetField(3)},
            { "E", Convert.ToBoolean(reader.GetField(4))},
            { "F", Convert.ToBoolean(reader.GetField(5))}
        };
    }
}