我正在尝试将BadDataException消息配置为包括更多信息,例如出于调试目的而发生异常的位置。我已经在下面编写了代码,但似乎抛出的异常正在打印出一般错误消息,而不是我配置的错误消息。我想我在这里错过了逻辑错误,但我不确定。任何帮助表示赞赏!
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
时使用它。
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);
或者您可以在创建BadDataFound
之后配置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("\"", "'")));
};