title: How to use a dynamic CSV delimiter with FileHelpers?
body: <p>Question: 
  I need to read a CSV file.
  I use the FileHelpers library to achieve this.</p>
  
  <p>The problem is I need a dynamic delimiter (user defined), meaning anything can be delimiter (Comma, semicolon, tab, newline, but also anything else).</p>
  
  <p>The problem is, FileHelpers defines the delimiter in an attribute, which means at compile-time. This makes it impossible to do it dynamically.</p>
  
  <p>What I can do is declare a new class, which inherits from one base class, and set the delimiter on this new class.</p>
  
  <pre><code>[FileHelpers.DelimitedRecord(",")]
  public class CommaCustomer : BaseCustomer
  {
  
  }
  </code></pre>
  
  <p>That way I only have to make changes in the base class for every new delimiter.
  The problem is, this is I can't (and don't want to) create a child class for every possible delimiter.</p>
  
  <p>This is the code I have so far:</p>
  
  <pre><code>using System;
  using System.Data;
  using System.IO;
  //using FileHelpers;
  //using FileHelpers.RunTime;
  
  
  namespace Examples
  {
  
  
      class MainClass
      {
  
  
          [STAThread]
          static void Main()
          {
              FileHelpers.FileHelperEngine engine = new FileHelpers.FileHelperEngine(typeof(SemicolonCustomer));
  
              // To read use:
  
              string str = @"D:\Username\Desktop\FileHelpers_Examples_CSharp_VbNet\Data\SemicolonCustomers.txt";
              //str = @"D:\Username\Desktop\FileHelpers_Examples_CSharp_VbNet\Data\CustomersDelimited.txt";
              SemicolonCustomer[] custs = (SemicolonCustomer[])engine.ReadFile(str);
              //Customer[] custs = (Customer[]) engine.ReadFile("yourfile.txt");
  
  
              foreach (SemicolonCustomer cli in custs)
              {
                  Console.WriteLine();
                  Console.WriteLine("Customer: " + cli.CustId.ToString() + " - " + cli.Name);
                  Console.WriteLine("Added Date: " + cli.AddedDate.ToString("d-M-yyyy"));
                  Console.WriteLine("Balance: " + cli.Balance.ToString());
                  Console.WriteLine();
                  Console.WriteLine("-----------------------------");
              } // Next cli
  
              Console.ReadKey();
              Console.WriteLine("Writing data to a delimited file...");
              Console.WriteLine();
  
  
              // To write use:
              //engine.WriteFile("myyourfile.txt", custs);
  
  
              //If you are using .NET 2.0 or greater is 
              //better if you use the Generics version:
  
              // FileHelperEngine engine = new FileHelperEngine&lt;Customer&gt;();
  
              // To read use (no casts =)
              // Customer[] custs = engine.ReadFile("yourfile.txt");
  
              // To write use:
              // engine.WriteFile("yourfile.txt", custs);
  
          } // End Sub Main
  
  
      } // End Class  MainClass
  
  
      //------------------------
      //   RECORD CLASS (Example, change at your will)
      //   TIP: Remember to use the wizard to generate this class
      public class BaseCustomer
      {
          public int CustId;
  
          public string Name;
          public decimal Balance;
          [FileHelpers.FieldConverter(FileHelpers.ConverterKind.Date, "ddMMyyyy")]
          public DateTime AddedDate;
      }
  
  
      [FileHelpers.DelimitedRecord(";")]
      public class SemicolonCustomer : BaseCustomer
      {
  
      }
  
  
      [FileHelpers.DelimitedRecord(",")]
      public class CommaCustomer : BaseCustomer
      {
  
      }
  
  
  }
  </code></pre>
  
  <p>Is it somehow possible at runtime to compile a child class</p>
  
  <pre><code>[FileHelpers.DelimitedRecord(\"" + delimiter + "\")]
  public class AnyDelimiterCustomer : BaseCustomer
  {           
  }
  </code></pre>
  
  <p>And then reference this runtime compiled class in code ?<br /></p>