【问题标题】:CSVHelper: logging errors when BadDataException is thrownCSVHelper:在抛出 BadDataException 时记录错误
【发布时间】:2021-08-24 09:07:14
【问题描述】:

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

            }
        }

【问题讨论】:

    标签: c# csv csvhelper


    【解决方案1】:

    您创建了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);
    

    或者你可以在创建CsvReader之后配置BadDataFound

    编辑:由于Version 20.0.0,您不能再编辑CsvReader.Configuration。正如Snympi 提到的,它现在是只读的。

    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("\"", "'")));
    
    };
    

    【讨论】:

    • 看起来 csv.Configuration.BadDataFound 事件处理程序已更改为只读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2011-10-29
    • 2014-09-11
    • 1970-01-01
    相关资源
    最近更新 更多