2010-01-05 11 views
5

Estoy intentando cargar un archivo CSV (delims son ';' y las citas son '"').Cómo definir un valor predeterminado para un campo de una clase elemento FileHelpers

He creado con éxito todo (la herramienta asistente es impresionante), pero hay una cosa que no puedo encontrar una solución para.

Básicamente, tengo una columna entera (System.Int32). En teoría más de los registros tendrán un valor entero positivo en esa columna. A veces, sin embargo, podría encontrar un valor "N/A" en esa columna. Lo que quiero lograr es que FileHelpers asigne un valor predeterminado (-1 funciona bien), cuando encuentra "N/A" en esa columna.

¿Alguien sabe si esto es posible?

PD: Es posible que tenga que hacer lo mismo para un campo System.DateTime (también podría tener "N/A" a veces).

Respuesta

5

La mejor manera que se le ocurra de hacer lo que quiera sería usar el atributo FieldConverter en esos campos y crear clases de convertidor personalizadas que le asignen el valor predeterminado que desea que tenga el campo.

Debe crear una clase que herede ConverterBase y luego proporcionar implementaciones para los dos métodos virtuales, StringToField() y FieldToString().

En el método FieldToString(), verificará si la cadena es igual a "N/A". Si es así, devuelve el valor predeterminado que deseas.

Necesitará dos clases diferentes, una que pueda manejar Int32 y otra que pueda manejar DateTime.

La documentación de FileHelpers tiene un ejemplo de cómo hacerlo. Link

+0

Aha! ¡Exactamente lo que quería! – Paulius

5

Como dijo Brandon u necesidad de utilizar este convertidor

// In your class 
[FieldConverter(typeof(NoValueConverter))] 
public int Number; 

// Te Converter 
public class NoValueConverter : ConverterBase 
{ 
    public override object StringToField(string sourceString) 
    { 
     if (sourceString.Trim().ToUpper() == "N/A") 
     return -1; // or int.MinValue; 
     else 
     return Integer.Parse(sourceString); 
    } 

    public override string FieldToString(object fieldValue) 
    { 
     return fieldValue.ToString(); 
    } 

} 

Estamos encantados de que u le gusta el asistente :) (estamos trabajando una característica de detección automática fría para que sea más fácil crear la clase de mapeo)

+0

dado que from es una palabra clave LINQ, ¿se debe usar un nombre de parámetro diferente o no importará? –

+0

Tienes razón Matt :) editado ahora, gracias Quizás deba actualizar el código de muestra de la biblioteca que se creó para .net 2.0 antes de donde era una palabra clave reservada. – MarcosMeli

Cuestiones relacionadas