我最近的项目要求我阅读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足够聪明,可以单独看到引号,但结果却是彻底的灾难。请帮我。 : - (
答案 0 :(得分:2)
您需要将[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;
}