FileHelper逃脱定界符 [英] FileHelper escape delimiter

查看:199
本文介绍了FileHelper逃脱定界符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用FileHelper 2.0解析我的CSV数据。是否有filehelper能够妥善处理躲过分隔符的任何选项? ,那它可以识别字段的数据而不是作为分隔符



我们的csv格式:
逃生逗号(,)以\



示例数据:




名字,姓氏



nico\,乐,opeka




当前代码:

  [DelimitedRecord()] 
公共类contactTemplate
{
公共字符串的firstName;
公共字符串的lastName;
}



我怎样才能得到的firstName =尼科,乐和lastName = opeka。 FileHelpers分裂用逗号,而现在它返回:




的firstName - > nico\



lastName的 - >乐,opeka



解决方案

首先,你需要让所有你的域选择性报价。

  [DelimitedRecord()] 
公共类contactTemplate
{
[FieldQuoted('',QuoteMode.OptionalForBoth)]
公共字符串的firstName;
[FieldQuoted('',QuoteMode.OptionalForBoth)]
公共字符串的lastName;
}



然后,你需要引用所有包含一个转义字符的字段。您可以使用 BeforeReadRecord 事件这一点。

  FileHelperEngine发动机=新FileHelperEngine(typeof运算(contactTemplate)); 
engine.BeforeReadRecord + = BeforeEvent;

私人无效BeforeEvent(EngineBase引擎,BeforeReadRecordEventArgs E)
{
如果(e.RecordLine.Contains(\))
{
字符串[] =零件SplitStringRespectingEscapeCharacter(eRecordLine);
部分= QuoteAnyPartsWhichContainEscapeCharacter(件);
部分= RemoveAnyEscapeCharacters(件);
e.RecordLine = parts.Join;
}
}

您可以找到一些代码来让你开始你的定制分割功能这里


I am using FileHelper 2.0 for parsing my csv data. Is there any option that filehelper can properly handle escaped delimiter? That it can identify field as data and not as delimiter.

Our csv format: escape comma (,) with \,

Example data:

name, lastname

nico\,le,opeka

Current code:

[DelimitedRecord(",")] 
public class contactTemplate
{
  public string firstName;
  public string lastName;
}

How can I get firstName = nico,le and lastName = opeka. FileHelpers splits by comma , and now it returns:

firstName -> nico\

lastName -> ,le,opeka

解决方案

First, you need to make all of your fields optionally quoted.

[DelimitedRecord(",")] 
public class contactTemplate
{
  [FieldQuoted('"', QuoteMode.OptionalForBoth)]
  public string firstName;
  [FieldQuoted('"', QuoteMode.OptionalForBoth)]
  public string lastName;
}

Then you need to quote all the fields which contain an escaped character. You can use a BeforeReadRecord event for this.

FileHelperEngine engine = new FileHelperEngine(typeof(contactTemplate)); 
engine.BeforeReadRecord += BeforeEvent; 

private void BeforeEvent(EngineBase engine, BeforeReadRecordEventArgs e)
{
    if (e.RecordLine.Contains("\"))
    {
        string[] parts = SplitStringRespectingEscapeCharacter(eRecordLine);
        parts = QuoteAnyPartsWhichContainEscapeCharacter(parts);
        parts = RemoveAnyEscapeCharacters(parts);
        e.RecordLine = parts.Join;
    } 
}

You can find some code to get you started on your customized split function here.

这篇关于FileHelper逃脱定界符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆