CsvReader не применяет конфигурацию

Я пытаюсь проанализировать файл CSV, некоторые строки которого закомментированы символом «#».

Я использую класс конфигурации CsvHelper для установки конфигурации 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

person Koh    schedule 05.04.2019    source источник
comment
Это странно, поскольку значение комментария конфигурации по умолчанию также равно #. Вы пытались установить его явно, а не в конструкторе, таком как reader.Configuration.Comment = 'value' внутри использования? Такое же поведение? Установите один за раз.   -  person ALFA    schedule 05.04.2019
comment
Я тоже так пробовал. Я даже распечатал конфигурацию с Console.WriteLine(reader.Configuration.Comment);, а она распечатала #   -  person Koh    schedule 05.04.2019
comment
Попробуйте поставить AllowComments в конфигурации на true.   -  person ALFA    schedule 05.04.2019
comment
хорошо, это сработало, но мне пришлось удалить установленный комментарий в конфигурации. Это означает, что если я переопределю комментарий с тем же # по умолчанию, он не будет работать. это кажется мне странным. var config = new Configuration { Delimiter = ",", //Comment = '#', Quote = '"', HasHeaderRecord = false, AllowComments = true, };   -  person Koh    schedule 05.04.2019
comment
Что, если вы используете двойные кавычки вокруг # в комментарии?   -  person ALFA    schedule 05.04.2019
comment
я не могу, так как комментарий принимает только символы, поэтому нужно поместить его в «#». Но странно то, что если я делаю это Comment = Convert.ToChar("#"), это работает. Это какой-то баг?   -  person Koh    schedule 05.04.2019
comment
Я действительно не знаю, это, вероятно, так как это довольно странно для меня. Однако приятно знать, что вы нашли способ заставить его работать.   -  person ALFA    schedule 05.04.2019


Ответы (2)


Только ниже работает. Или вы не можете явно указать символ комментария, если он по умолчанию «#».

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

Я считаю, что 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))}
        };
    }
}
person David Specht    schedule 05.04.2019