Handling quotes with FileHelpers

edosoft picture edosoft · Feb 22, 2011 · Viewed 7.1k times · Source

I'm using the excellent FileHelpers library to import many csv files, but run into a problem. I have a csv file with these three example lines

id,text,number
120,"good line this one",789
121,""not good" line", 4456
122,,5446

and this (example) class

  [IgnoreFirst(1)]
  [IgnoreEmptyLines()]
  [DelimitedRecord(",")]
  public sealed class JOURNAL
  {
    public Int32 ID;

    [FieldQuoted('"', QuoteMode.AlwaysQuoted, MultilineMode.NotAllow)]
    public string TEXT;

    public Int32? NUMBER;
  }

The problem with QuoteMode.AlwaysQuoted is that ID 122 will fail with error:

The field 'TEXT' not begin with the QuotedChar at line 3. You can use FieldQuoted(QuoteMode.OptionalForRead) to allow optional quoted field

Switching to QuoteMode.OptionalForRead will fail with an error for id 121:

The field TEXT is quoted but the quoted char: " not is just before the separator (You can use [FieldTrim] to avoid this error)

So how can I handle a csv that has empty fields with no quotes AND quoted text fields with extra quotes in the text?

Answer

Marcos Meli picture Marcos Meli · Feb 22, 2011

That looks like a case that we don't support, let me add a test case and make it work in both modes, for the first one we need to validate if semantic is correct, ie. if QuoteMode.AlwaysQuoted can allow ,, or must be ,"", but the second option must work :) Cheers