2010-03-26 4 views
10

Ich verwende die ausgezeichnete FileHelpers-Bibliothek, um eine Flugplan-Datei fester Länge zu verarbeiten.C# - Können sich FileHelper FieldConverter-Routinen auf andere Felder im Datensatz beziehen?

Ich habe ein Datumsfeld, dann ein paar 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 stellen Sie eine benutzerdefinierte Funktion bereit, um Ihre Felddaten zu verarbeiten und StringToField und FieldToString zu implementieren.

Meine Frage ist: kann ich andere Felder (bereits gelesen) an diesen Kunden FieldConverter auch übergeben, so kann ich Datum und Zeit zusammen kombinieren. FieldConverter verfügt über eine Implementierung, mit der Sie sowohl auf eine benutzerdefinierte Verarbeitungsklasse als auch auf "andere Zeichenfolgen" oder sogar auf ein Array von Objekten verweisen können. Aber angesichts dessen, dass dies in der Attributdefinition gemacht wird, habe ich Schwierigkeiten, auf diesen früheren Feldbezug zuzugreifen.

+0

Eigentlich Während ich immer noch an der Frage interessiert bin, habe ich (irgendwie) eine Antwort gefunden. Ich hatte vergessen, der ganze Datensatz ist eigentlich eine Klasse, also kann ich einen Konstruktor machen, und was auch immer kombinierte Mitglieder ich dort will ..... aaarrrrggghh so einfach. – Pete

Antwort

5

In der Tat können Sie auf vorherige Felder zugreifen, weil sie in der Reihenfolge gelesen werden, aber ein bisschen seltsam für andere lesen den Code sein kann.

Vielleicht können Sie die Schnittstelle INotifyRead und auf dem Verfahren implementieren AfterRead tun alle Sachen

Ihre Klasse so etwas wie sein:

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

Hoffnung dieser Helfer

Prost