我正在尝试解析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
答案 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))}
};
}
}