using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Collections.ObjectModel;
using CsvHelper.Configuration;
using CsvHelper.Configuration.Attributes;
using CsvHelper.Expressions;
using CsvHelper.TypeConversion;
public string MailboxId { get; set; }
public string EmailAddress { get; set;}
public DateTime? Created { get; set; }
public DateTime? Updated { get; set; }
public string CreatedBy { get; set;}
public string Memo { get; set; }
public static void Test()
var CsvPath = @"Question71844007.csv";
public static void TestRead(string CsvPath)
var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture);
csvConfiguration.HasHeaderRecord = true;
csvConfiguration.Delimiter = ";";
csvConfiguration.TrimOptions = TrimOptions.Trim;
using (var reader = new StreamReader(CsvPath, Encoding.UTF8))
using (var csv = new CsvReader(reader, csvConfiguration))
records = csv.GetRecords<Record>().ToArray();
var outputPath = $@"reformatted71844007.csv";
using (var writer = new StreamWriter(outputPath))
using (var csv = new CsvWriter(writer, CultureInfo.CurrentCulture))
var options = new TypeConverterOptions { Formats = new[] { "yyyy-MM-dd HH:mm:ss" } };
csv.Context.TypeConverterOptionsCache.AddOptions<DateTime?>(options);
csv.Context.TypeConverterOptionsCache.AddOptions<DateTime>(options);
csv.WriteRecords(records.Where(x => x.Memo != null));
var result = File.ReadAllText(outputPath);
Console.WriteLine(result);
Assert.IsTrue(result.Contains(@"1,foo@bar.net,2022-04-12 12:05:05,2022-04-12 12:06:07,,hello"));
static void CreateCSV(string CsvPath)
var records = new List<Record>
EmailAddress = "foo@bar.net",
Created = new DateTime(2022, 4, 12, 12, 5, 5, 333, DateTimeKind.Local),
Updated = new DateTime(2022, 4, 12, 12, 6, 7, 444, DateTimeKind.Local),
var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture);
csvConfiguration.HasHeaderRecord = true;
csvConfiguration.Delimiter = ";";
csvConfiguration.TrimOptions = TrimOptions.Trim;
using (var writer = new StreamWriter(CsvPath, false, Encoding.UTF8))
using (var csv = new CsvWriter(writer, csvConfiguration))
csv.WriteRecords(records);
Console.WriteLine(File.ReadAllText(CsvPath));
public static void Main()
Console.WriteLine("Environment version: {0} ({1})", System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription ,Environment.Version);
Console.WriteLine("OS Version: {0}, NewLine: {1}", System.Environment.OSVersion, JsonConvert.SerializeObject(Environment.NewLine));
Console.WriteLine("{0} version: {1}", typeof(CsvReader).Assembly.GetName().Name, typeof(CsvReader).Assembly.FullName);
Console.WriteLine("Failed with unhandled exception: ");