CSVHelper:引发BadDataException时记录错误 [英] CSVHelper: logging errors when BadDataException is thrown

查看:102
本文介绍了CSVHelper:引发BadDataException时记录错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试配置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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆