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;
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
精彩评论