我正在尝试加载CSV文件(delims是';',引号是''')。
我已成功创建了所有内容(向导工具非常棒),但有一件事我无法找到解决方案。
基本上,我有一个整数(System.Int32)列。理论上记录的大多数在该列中将具有正整数值。但是,有时我可能会在该列中遇到值“N / A”。我想要实现的是,当FileHelpers在该列中遇到“N / A”时,它会分配一个默认值(-1可以正常工作)。
有人知道这是否可行?
PS:我可能需要为System.DateTime字段做同样的事情(有时也可能有“N / A”)。
答案 0 :(得分:5)
想到做你想做的事情的最好方法是在这些字段上使用FieldConverter
属性,并创建自定义转换器类,分配你希望字段拥有的默认值。
您需要创建一个继承ConverterBase
的类,然后为两个虚拟方法StringToField()
和FieldToString()
提供实现。
在FieldToString()
方法中,您将检查字符串是否等于“N / A”。如果是,则返回所需的默认值。
您需要两个不同的类,一个可以处理Int32
,另一个可以处理DateTime
。
FileHelpers文档中有一个如何执行此操作的示例。 Link
答案 1 :(得分:5)
// 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();
}
}
我们很高兴您喜欢精灵:)(我们正在开发一个很酷的自动检测功能,以便更容易创建映射类)