是否可以使用FileHelpers库向字段添加$

时间:2013-12-13 19:39:20

标签: c# csv filehelpers

是否可以使用FileHelpers库向字段添加$? 我有一个对象

[DelimitedRecord("|")]
public class TradesToBloombergFileHeaders
{
    [FieldOrder(1)]
    public  Guid id;
    [FieldOrder(2)]
    public  string name;
    [FieldOrder(3)]
    public  double price;
    [FieldOrder(4), FieldConverter(ConverterKind.Date, "yyyyMMdd")]
    public  DateTime date;
}

我正在生成一个文件,并希望价格为$ xxx.xx格式。 它甚至可能吗?我搜索,阅读文档,我没有看到任何类似于我需要的东西。 谢谢!

4 个答案:

答案 0 :(得分:0)

可能是属性:

    [FieldOrder(3), FieldConverter(ConverterKind.Decimal, "C")]
    public decimal price;

会为你做到这一点。如您所见,我将类型更改为decimal,这对价格/金钱更有利。

请参阅Standard Numeric Format StringsConverterKind enum


实际上我从未使用过FileHelpers。页面Arguments for the Default Converters of the library似乎表明我无法使用上面的"C"标准格式字符串。如果是这种情况,请尝试模仿Decimal Custom Converter中的示例,或许?

答案 1 :(得分:0)

我曾经做过的是将文本文件数据填充的属性设为私有,并使用访问者创建自定义公共属性

[FieldOrder(3)]
private double _price;

public string price
{
    get { return string.Format("{0}$", _price.ToString()); }
    set { _price = Convert.ToDouble(value.replace('$', '')); }
}

你可能想要调整转换结果的样子,但是你明白了。

答案 2 :(得分:0)

@弗朗西斯在下面的回答对我不起作用,直到后来我都没有看到海报的评论。我以为我会清理它,并把它作为其他人的答案,这些人偶然发现了这篇文章,试图弄清楚如何格式化输出。

就我而言,我正在格式化字符串数据类型,因此我定义了' StringToField'换句话说,但我已提供代码来解决下面海报的数据类型。

public class MoneyFormatter : ConverterBase
{
    public override object FieldToString(string fieldValue)
    {
        var val = fieldValue == null ? 0 : Convert.ToDecimal(fieldValue); 
        return "$" + val.ToString(CultureInfo.InvariantCulture); 
    }
}

[FieldOrder(3)]
[FieldConverter(typeof(MoneyFormatter))]
public double price;

答案 3 :(得分:-2)

输出时...

示例:

Console.WriteLine("{0}, {1}, {2}, {3}, ${4}", detail.CheckID, detail.IssueDate, detail.StopIndicator, detail.Payee, detail.CheckAmount);