c# – filehelpers中的可选引号

我最近的项目要求我阅读csv文件.

人们引导我去找文件,因为“你不应该重新发明”.

但是,文档真的很糟糕,我似乎无法找到一种方法来处理可选的引号.

这是我的csv:

2734000585,IDR,04/04/2016,04/04/2016,0000000,1010,SETOR TUNAI,"783275305006511 VENDY",,"820,000.00","5,820,000.00"

我不是那个在csv之上生成的人,它来自银行.
正如你所看到的,他们的csv文件糟透了,并且有一些严重的问题.
有些字符串用引号括起来,有些不是.
此外,货币值编码为字符串.

我为它做了一堂课:

using System;
using FileHelpers;

[DelimitedRecord(",")]

public class ImporBii
{
    public long RekNum;

    public string Currency;

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")]
    public DateTime TransDate;

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")]
    public DateTime RecordDate;

    public string Unused1;

    public int TransCode;

    public string TransCodeStr;

    public string Keterangan;

    [FieldConverter(ConverterKind.Decimal, "#,##0.00")]
    public decimal Debet;

    [FieldConverter(ConverterKind.Decimal, "#,##0.00")]
    public decimal Kredit;

    [FieldConverter(ConverterKind.Decimal, "#,##0.00")]
    public decimal Saldo;
}

我认为filehelpers足够聪明,可以自己看引号,但结果却是彻底的灾难.请帮我. 🙁

最佳答案 您需要将[FieldQuoted()]添加到可以引用的字段中

[DelimitedRecord(",")]
public class ImporBii
{
    public long RekNum;

    public string Currency;

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")]
    public DateTime TransDate;

    [FieldConverter(ConverterKind.Date, "dd/MM/yyyy")]
    public DateTime RecordDate;

    public string Unused1;

    public int TransCode;

    public string TransCodeStr;

    [FieldQuoted('"', QuoteMode.OptionalForBoth)]
    public string Keterangan;

    [FieldConverter(ConverterKind.Decimal, ".")]
    [FieldQuoted('"', QuoteMode.OptionalForBoth)]
    public decimal? Drebet;

    [FieldConverter(ConverterKind.Decimal, ".")]
    [FieldQuoted('"', QuoteMode.OptionalForBoth)]
    public decimal? Kredit;

    [FieldConverter(ConverterKind.Decimal, ".")]
    [FieldQuoted('"', QuoteMode.OptionalForBoth)]
    public decimal? Saldo;
}
点赞