filehelpers 中的可选引号
Optional quotation marks in filehelpers
我最近的项目需要我读取 csv 文件。
人们将我引导至 filehelpers,因为 "you shouldn't reinvent the whell"。
但是,文档真的很烂,我似乎找不到处理可选引号的方法。
这是我的 csv:
2734000585,IDR,04/04/2016,04/04/2016,0000000,1010,SETOR TUNAI,"783275305006511 VENDY",,"820,000.00","5,820,000.00"
上面的csv不是我生成的,是银行的。
如您所见,他们的 csv 文件很糟糕并且有一些严重的问题。
有些字符串用引号引起来,有些则没有。
此外,货币值被编码为字符串。
我为它做了一个class:
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;
}
我最近的项目需要我读取 csv 文件。 人们将我引导至 filehelpers,因为 "you shouldn't reinvent the whell"。 但是,文档真的很烂,我似乎找不到处理可选引号的方法。 这是我的 csv:
2734000585,IDR,04/04/2016,04/04/2016,0000000,1010,SETOR TUNAI,"783275305006511 VENDY",,"820,000.00","5,820,000.00"
上面的csv不是我生成的,是银行的。 如您所见,他们的 csv 文件很糟糕并且有一些严重的问题。 有些字符串用引号引起来,有些则没有。 此外,货币值被编码为字符串。
我为它做了一个class:
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;
}