10 Stimmen

C# - Können FileHelper FieldConverter-Routinen auf andere Felder im Datensatz verweisen?

Ich benutze die ausgezeichnete FileHelpers-Bibliothek, um eine Flugplandatei mit fester Länge zu verarbeiten.

Ich habe ein Datumsfeld, dann einige Felder später im Datensatz ein Zeitfeld.

Ich möchte beide in der FileHelpers-Record-Klasse kombinieren und weiß, dass es ein benutzerdefiniertes FieldConverter-Attribut gibt. Mit diesem Attribut geben Sie eine benutzerdefinierte Funktion an, um Ihre Felddaten zu verarbeiten und implementieren StringToField und FieldToString.

Meine Frage ist: Kann ich anderen Feldern (die bereits gelesen wurden) auch diesem benutzerdefinierten FieldConverter übergeben, damit ich Datum und Zeit zusammenführen kann? FieldConverter hat eine Implementierung, die es Ihnen ermöglicht, auf eine benutzerdefinierte Verarbeitungsklasse UND "andere Zeichenfolgen" oder sogar ein Objektarray zu verweisen. Aber da dies in der Attributdefinition erfolgt, habe ich Schwierigkeiten, auf diese früheren Feldreferenz zuzugreifen.

[FieldFixedLength(4)]  
[FieldConverter(typeof(MyTimeConverter),"z.B. GeplanteAbflugszeit")]  
public DateTime geplanteAbflugszeit;

5voto

Marcos Meli Punkte 3408

Tatsächlich können Sie auf vorherige Felder zugreifen, weil sie in der Reihenfolge gelesen werden, aber es kann für andere Leser des Codes etwas seltsam sein.

Vielleicht können Sie das Interface INotifyRead implementieren und in der Methode AfterRead alles erledigen

Ihre Klasse muss etwa so aussehen:

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

Hoffentlich hilft das

Prost

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X