CSVHelper:引发BadDataException时记录错误

问题描述 投票:0回答:1

我正在尝试将Bad​​DataException消息配置为包括更多信息,例如出于调试目的而发生异常的位置。我已经在下面编写了代码,但似乎抛出的异常正在打印出一般错误消息,而不是我配置的错误消息。我想我在这里错过了逻辑错误,但我不确定。任何帮助表示赞赏!

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个回答
0
投票

您创建了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("\"", "'")));

};
© www.soinside.com 2019 - 2024. All rights reserved.