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

1

10

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;
Aphasia answered 26/3, 2010 at 6:53 Comment(1)
Actually, while I'm still interested in the question, I (sort of) found an answer. I'd forgotten the whole record is actually a class, so I can make a constructor, and set up whatever combined members I want there.....aaarrrrgggghh so simple.Aphasia
P
5

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

Preadamite answered 26/3, 2010 at 11:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.