Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
417 views
Welcome To Ask or Share your Answers For Others

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...