2010-03-26 6 views
10

Estoy utilizando la excelente biblioteca FileHelpers para procesar un archivo de horario fijo de una aerolínea.C# - ¿Pueden las rutinas FileHelper FieldConverter referirse a otros campos en el registro?

Tengo un campo de fecha, luego unos campos más adelante en el registro, un campo de tiempo.

Quiero combinar ambos en la clase de registro FileHelpers y sé que hay un atributo FieldConverter personalizado. Con este atributo, usted proporciona una función personalizada para manejar sus datos de campo e implementar StringToField y FieldToString.

Mi pregunta es: ¿puedo pasar otros campos (ya leídos) a este cliente FieldConverter también, por lo que puedo combinar la fecha y la hora. FieldConverter tiene una implementación que le permite referirse a una clase de procesamiento personalizada Y a 'otras cadenas' o incluso a una matriz de objetos. Pero, dado que esto se hace en la definición de atributo, estoy luchando para acceder a esta referencia de campo anterior.

[FieldFixedLength(4)] 
[FieldConverter(typeof(MyTimeConverter),"eg. ScheduledDepartureDate")] 
public DateTime scheduledDepartureTime; 
+0

realidad , mientras todavía estoy interesado en la pregunta, encontré una respuesta. Olvidé que todo el registro es en realidad una clase, así que puedo hacer un constructor y configurar los miembros combinados que quiera allí ..... aaarrrrgggghh tan simple. – Pete

Respuesta

5

De hecho se puede acceder a los campos anteriores, porque ellos se leen en orden, pero puede ser un poco extraño para otra lectura del código.

Tal vez se puede implementar la interfaz INotifyRead y en el método AfterRead hacer todas las cosas

Su clase debe ser algo como:

public class YourRecord 

... 

[FieldFixedLength(6)] 
public string scheduledDepartureDate; 

[FieldFixedLength(4)] 
public string scheduledDepartureTime; 

[FieldIgnored] 
public DateTime scheduledDepartureDateTime; 

public void AfterRead(EngineBase engine, string line) 
{ 
    scheduledDepartureDateTime = CombineDateTime(scheduledDepartureDate, scheduledDepartureTime)     
} 

Esperamos que este ayudantes

Saludos

Cuestiones relacionadas