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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With