5

我正在尝试加载一个 CSV 文件(分隔符是 ';' 而引号是 '"')。

我已经成功创建了所有内容(向导工具很棒),但是有一件事我找不到解决方案。

基本上,我有一个整数 (System.Int32) 列。理论上,大多数记录在该列中都会有一个正整数值。但是,有时我可能会在该列中遇到值“N/A”。我想要实现的是让 FileHelpers 分配一个默认值(-1 工作得很好),当它在该列中遇到“N/A”时。

有谁知道这是否可能?

PS:我可能需要对 System.DateTime 字段做同样的事情(有时它也可能有“N/A”)。

4

2 回答 2

5

想到的最好的方法是FieldConverter在这些字段上使用属性并创建自定义转换器类,以分配您希望该字段具有的默认值。

您需要创建一个继承 的类,ConverterBase然后为两个虚拟方法StringToField()FieldToString().

在该FieldToString()方法中,您将检查字符串是否等于“N/A”。如果是,则返回所需的默认值。

您将需要两个不同的类,一个可以处理Int32,一个可以处理DateTime

FileHelpers 文档有一个如何执行此操作的示例。关联

于 2010-01-05T15:52:26.323 回答
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();
    }

}

我们很高兴您喜欢该向导 :)(我们正在开发一个很酷的自动检测功能,以便更轻松地创建映射类)

于 2010-01-05T16:27:24.500 回答