using TinyCsvParser.Mapping;
using TinyCsvParser.Tokenizer.RFC4180;
public static void Main()
var options = new Options('"', '\\', ';');
var tokenizer = new RFC4180Tokenizer(options);
CsvParserOptions csvParserOptions = new CsvParserOptions(true, tokenizer);
CsvReaderOptions csvReaderOptions = new CsvReaderOptions(new[] { Environment.NewLine });
CsvOpportunityMap csvMapper = new CsvOpportunityMap();
CsvParser<Opportunity> csvParser = new CsvParser<Opportunity>(csvParserOptions, csvMapper);
var stringBuilder = new StringBuilder()
.AppendLine("\"Opportunity Name\";\"Order Number\";\"Date of request for deed registry check\";\"Date of deed registry evaluation\"")
.AppendLine("\"Implementation - Jayde Cote\";\"20190605_Cote_11\";\"\";\"09.11.2020\"")
.AppendLine("\"Implementation - Ebony Collier\";\"20190612_Collier_48\";\"09.10.2020\";\"09.11.2020\"")
.AppendLine("\"Implementation - Izzy Bains\";\"20190528_Bains_42\";\"09.11.2020\";\"\"");
.ReadFromString(csvReaderOptions, stringBuilder.ToString())
private sealed class CsvOpportunityMap : CsvMapping<Opportunity>
public CsvOpportunityMap() : base()
MapProperty(0, m => m.OpportunityName );
MapProperty(1, m => m.OrderNumber );
MapProperty(2, m => m.RequestDate);
MapProperty(3, m => m.EvaluationDate);
public class Opportunity {
public string OpportunityName {get; set;}
public string OrderNumber {get; set;}
public DateTime? RequestDate {get; set;}
public DateTime? EvaluationDate {get; set;}
public override string ToString(){
return "" + OpportunityName +", "+ OrderNumber +", "+ RequestDate +", "+ EvaluationDate;