Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# - Can FileHelper FieldConverter routines refer to other fields in the record?

I am using the excellent FileHelpers library to process a fixed-length airline schedule file.

I have a date field, then a few fields later on in the record, a time field.

I want to combine both of these in the FileHelpers record class, and know there is a custom FieldConverter attribute. With this attribute, you provide a custom function to handle your field data and implement StringToField and FieldToString.

My question is: can I pass other fields (already read) to this customer FieldConverter too, so I can combine Date and Time together. FieldConverter has an implementation that allows you to refer to both a custom processing class AND 'other strings' or even an array of object. But, given this is done in the attribute definition, I am struggling to access this earlier-field reference.

[FieldFixedLength(4)]  
[FieldConverter(typeof(MyTimeConverter),"eg. ScheduledDepartureDate")]  
public DateTime scheduledDepartureTime;
like image 728
Pete Avatar asked Mar 26 '10 06:03

Pete


1 Answers

In fact you can access previous fields because them are read in order but can be a bit strange for other reading the code.

Maybe you can implement the interface INotifyRead and on the method AfterRead do all the stuff

Your class must be something like:

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)                 
}

Hope this helpers

Cheers

like image 92
Marcos Meli Avatar answered Oct 13 '22 05:10

Marcos Meli