csvhelper

csvhelper - csv reader c#



En CsvHelper, ¿cómo detectar un error de conversión y saber en qué campo y en qué fila ocurrió? (2)

Actualmente, no hay forma de ignorar los errores en el campo / nivel de propiedad. Sus opciones actuales son estas:

Mira los datos de excepción.

catch( Exception ex ) { // This contains useful information about the error. ex.Data["CsvHelper"]; }

Ignorar las excepciones de lectura. Esto está en un nivel de fila, sin embargo, no campo. Permitirá que todo el archivo se siga leyendo y solo ignorará las filas que no funcionan. Puede obtener una devolución de llamada cuando se produce una excepción.

csv.Configuration.IgnoreReadingExceptions = true; csv.Configuration.ReadingExceptionCallback = ( ex, row ) => { // Do something with the exception and row data. // You can look at the exception data here too. };

Estoy usando la clase CsvReader éxito y estoy contento con ella, sin embargo, el archivo que consumo está siendo producido por un grupo que cambia los formatos de columna sin avisarme.

Entonces, en un momento todo está funcionando, a la mañana siguiente, las cosas se rompen y el bloque try catch en torno a csv.GetRecord<MyType>() el error y lo registra, sin embargo, no puedo recopilar ninguna información valiosa de la instancia de Exception. Simplemente dice: "La conversión no se puede realizar". y la InnerException no tiene nada. No es muy útil. Ni siquiera sé cuál de mis 150 columnas está causando el problema.

¿Puede ayudarme a averiguar cómo puedo identificar qué columna en qué fila está causando el problema?

Gracias


En primer lugar, parece que necesito capturar CsvTypeConverterException.

while (csv.Read()) { try { var record = csv.GetRecord<MyType>(); } catch (CsvTypeConverterException ex) { //ex.Data.Values has more info... } }

Ahora sé cómo investigar qué fue lo que no funcionó, pero ¿cómo me aseguro de que ese campo se omita pero que el resto de los campos de esa fila se conviertan, de modo que no se tire toda la fila?

Gracias