2010-01-05 3 views
5

Ich versuche, eine CSV-Datei (delims ist ‚;‘ und Zitate sind " ') zu laden.Wie man einen Standardwert für ein Feld eines FileHelpers Elementklasse definieren

ich erfolgreich alles geschaffen habe (das Assistent-Tool ist genial), aber es gibt eine Sache, die ich nicht eine Lösung für.

Grundsätzlich finden, ich habe eine ganze Zahl (System.Int32) Spalte. In der Theorie meist der Aufzeichnungen ein haben positiver Integer-Wert in dieser Spalte Manchmal kann ich jedoch einen Wert "N/A" in dieser Spalte finden .. Was ich erreichen möchte, ist FileHelpers zuweisen einen Standardwert (-1 funktioniert gut), wenn es in dieser Spalte auf "N/A" stößt.

Weiß jemand, ob das möglich ist?

PS: Ich muss möglicherweise das gleiche für ein System.DateTime Feld tun (es könnte auch manchmal "N/A" haben).

Antwort

5

Der beste Weg, um zu tun, was Sie wollen, wäre die Verwendung des Attributs FieldConverter für diese Felder und benutzerdefinierte Konverter Klassen erstellen, die den Standardwert zuweisen, die das Feld haben soll.

Sie müssen eine Klasse erstellen, die ConverterBase erbt, und dann Implementierungen für die beiden virtuellen Methoden StringToField() und FieldToString() bereitstellen.

In der FieldToString()-Methode überprüfen Sie, ob die Zeichenfolge gleich "N/A" ist. Wenn dies der Fall ist, geben Sie den gewünschten Standardwert zurück.

Sie benötigen zwei verschiedene Klassen, eine, die mit Int32 umgehen kann und eine, die DateTime verarbeiten kann.

Die FileHelpers-Dokumentation enthält ein Beispiel dafür. Link

+0

Aha! Genau das, was ich wollte! – Paulius

5

Wie Brandon sagte u braucht diese Konverter zu verwenden

// In your class 
[FieldConverter(typeof(NoValueConverter))] 
public int Number; 

// Te Converter 
public class NoValueConverter : ConverterBase 
{ 
    public override object StringToField(string sourceString) 
    { 
     if (sourceString.Trim().ToUpper() == "N/A") 
     return -1; // or int.MinValue; 
     else 
     return Integer.Parse(sourceString); 
    } 

    public override string FieldToString(object fieldValue) 
    { 
     return fieldValue.ToString(); 
    } 

} 

Wir freuen uns, dass u die Assistenten gefallen :) (wir arbeiten eine kühle automatische Erkennung Feature, um es einfach, die Mapping-Klasse zu erstellen)

+0

da from ist ein LINQ Schlüsselwort, sollte ein anderer Parametername verwendet werden, oder spielt das keine Rolle? –

+0

Du hast recht Matt :) jetzt bearbeitet, danke Vielleicht muss ich den Beispielcode der Bibliothek, die für .net 2.0 erstellt wurde, vorher von wo aus ein reserviertes Schlüsselwort erstellen. – MarcosMeli

Verwandte Themen