Search code examples
c#.netcsvhelper

CsvHelper cannot read double values


I have this code to read a simple CSV file with the CsvHelper library

public class CSVData
    {
        public string Time { get; set; }
        public double Value1 { get; set; }
        public double Value2 { get; set; }
        public double Value3 { get; set; }
    }

using (var reader = new StreamReader("c:\\temp\\test.csv"))
using (var csv = new CsvReader(reader))
{
   var records = csv.GetRecords<CSVData>();
}

and this is how th CSV data looks

"Time","Value1","Value2","Value3"
 8/28/2019 4:32:09 PM,2.03,10229.73,10437.51821998

and I get this error when I try to read the records with

 foreach (CSVData item in records)

CsvHelper.BadDataException: 'You can ignore bad data by setting BadDataFound to null.'

Solution

  • Your code actually worked fine for me as long as you use the US culture setting for double (using a . decimal point).

    class Program
    {
        static void Main(string[] args)
        {
    
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);
    
            List<CSVData> records;
    
            using (var reader = new StreamReader("test.csv"))
            using (var csv = new CsvReader(reader))
            {
                records = csv.GetRecords<CSVData>().ToList();
            }
    
            foreach (var r in records)
            {
                Console.WriteLine($"Time:{r.Time} Value1:{r.Value1} Value2:{r.Value2} Value3:{r.Value3}");
            }
        }
    }
    

    This outputs:

    Time: 8/28/2019 4:32:09 PM Value1:2.03 Value2:10229.73 Value3:10437.51821998