微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – FileHelpers在字段中引用和逗号

我有一个csv文件,我正在使用FileHelpers解析,我有一个情况,引号和逗号都可以出现在字段中:

逗号:

323,"PC","28/02/2014","UNI001","5000","Return","Returned Goods,damaged",88.00,15.40,"T1","N",0.00,"R","-",

引用

148,"SI","13/01/2014","CGS001","4000",1,"5","17" Monitor",266.00,45.39,"Y",311.39,

我的班级是:

[DelimitedRecord(",")]
public class Transaction
{
    public int TRAN_NUMBER;
    [FieldQuoted('"',QuoteMode.OptionalForBoth)]
    public string TypeText;
    [FieldQuoted('"',QuoteMode.OptionalForBoth)]
    public string DATE;
    [FieldQuoted('"',QuoteMode.OptionalForBoth)]
    public string TransactionAccount;
    [FieldQuoted('"',QuoteMode.OptionalForBoth)]
    public string NOMINAL_CODE;

    public int DEPT_NUMBER;

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

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

    public string NET_AMOUNT;
    public string TAX_AMOUNT;
    [FieldQuoted('"',QuoteMode.OptionalForBoth)]
    public string TaxCodeName;
    [FieldQuoted('"',QuoteMode.OptionalForBoth)]
    public string PAID_FLAG;

    public string AMOUNT_PAID;

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

    public string RECON_DATE;
}

我找到了这个帖子
FileHelpers nested quotes and commas – parsing error

engine.BeforeReadRecord += (sender,args) => 
args.RecordLine = args.RecordLine.Replace(@"""","'");

但它只能帮助引号出现问题,而不是逗号.

是否可以使用FileHelper解决这两个问题,或者我应该寻找替代解决方案?

解决方法

您可以实现BeforeReadRecord事件来“修复”坏线.

FileHelperEngine engine = new FileHelperEngine<Transaction>(); 
engine.BeforeReadRecord += BeforeEvent; 

private void BeforeEvent(EngineBase engine,BeforeReadRecordEventArgs e)
{
    var line = e.RecordLine;

    // you have to write the following replacement routine...
    var fixedLine = ReplaceEmbeddedCommasAndQuotesWithSomethingDifferent(line); 

    e.RecordLine = fixedLine; // replace the line with the fixed version
}

在您阅读完记录后,您可以处理它们以反转更换过程以修复它们.

如果您更喜欢在FileHelpers类中定义所有逻辑,则可以实现INotifyRead< Transaction>而不是使用事件.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐