CSVHelper:引发BadDataException时记录错误 [英] CSVHelper: logging errors when BadDataException is thrown
问题描述
我正在尝试配置BadDataException消息以包括更多信息,例如出于调试目的而发生异常的位置.我已经在下面编写了代码,但似乎抛出的异常正在打印出通用错误消息,而不是我配置的错误消息.我想我在这里错过了逻辑错误,但我不确定.感谢您的帮助!
I'm trying to configure the BadDataException message to include more information like the where the exception has occurred for debugging purposes. I have written the code below but it seems that the exception thrown is printing out the generic error message and not the one I configured. I think I missing a logical error here but I'm not sure. Any help is appreciated!
public void HeaderColumnParser(string PathToFile) {
try {
using (TextReader fileReader = File.OpenText(PathToFile)) {
var csv = new CsvReader(fileReader, CultureInfo.InvariantCulture);
CsvConfiguration csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture) {
BadDataFound = context => {
throw new BadDataException(context, string.Format("BadDataFound: Bad entry found at field {0}, \n row {1}: {2}", context.Field, context.RawRow, context.RawRecord.Replace("\"", "'")));
}
};
// csv.Configuration.AllowComments = true;
csv.Read();
csv.ReadHeader();
//while condition returns true till last row
while (csv.Read()) {
string RefDes = "";
//Index 0 gets the ReferenceDesignator if header column exists
if (ColumnIndex[0] > 0) {
if (csv.TryGetField(ColumnIndex[0], out string value)) {
RefDes = value;
}
}
//gets MPN
if (ColumnIndex[1] > 0) {
if (csv.TryGetField(ColumnIndex[1], out string value)) {
MPN.Add(new ManufacturerPartNumber(RefDes, value));
}
}
//Gets Value
if (ColumnIndex[2] > 0) {
if (csv.TryGetField(ColumnIndex[2], out string value)) {
Values.Add(new ComponentValue(RefDes, value));
}
}
//Gets Short description
if (ColumnIndex[3] > 0) {
if (csv.TryGetField(ColumnIndex[3], out string value)) {
DescriptionShort.Add(new ShortDescription(RefDes, value));
}
}
//Gets Long description
if (ColumnIndex[4] > 0) {
if (csv.TryGetField(ColumnIndex[4], out string value)) {
DescriptionLong.Add(new LongDescription(RefDes, value));
}
}
//Gets Manufacturer
if (ColumnIndex[5] > 0) {
if (csv.TryGetField(ColumnIndex[5], out string value)) {
Manufacturer.Add(new Manufacturer(RefDes, value));
}
}
//Gets DNI components
if (ColumnIndex[6] > 0) {
if (csv.TryGetField(ColumnIndex[6], out string value)) {
DNI.Add(new DNI(RefDes, value));
}
}
//Gets the datasheet
if (ColumnIndex[7] > 0) {
if (csv.TryGetField(ColumnIndex[7], out string value)) {
DataSheet.Add(new DataSheet(RefDes, value));
}
}
}
}
}
catch (BadDataException ex) {
throw;
}
}
推荐答案
您创建了 CsvConfiguration
,但从未使用过它.您可以在创建 CsvReader
时使用它.
You created the CsvConfiguration
, but you never use it. You can either use it in the creation of the CsvReader
.
CsvConfiguration csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
{
BadDataFound = context => {
throw new BadDataException(context, string.Format("BadDataFound: Bad entry found at field {0}, \n row {1}: {2}", context.Field, context.RawRow, context.RawRecord.Replace("\"", "'")));
}
};
var csv = new CsvReader(fileReader, csvConfig);
或者您可以在创建 CsvReader
后配置 BadDataFound
.
Or you can configure BadDataFound
after you create the CsvReader
.
var csv = new CsvReader(fileReader, CultureInfo.InvariantCulture);
csv.Configuration.BadDataFound = context =>
{
throw new BadDataException(context, string.Format("BadDataFound: Bad entry found at field {0}, \n row {1}: {2}", context.Field, context.RawRow, context.RawRecord.Replace("\"", "'")));
};
这篇关于CSVHelper:引发BadDataException时记录错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!