CsvHelper 无法读取双精度值

CsvHelper cannot read double values

我有这段代码可以使用 CsvHelper 库读取一个简单的 CSV 文件

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>();
}

这是 CSV 数据的样子

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

当我尝试使用

读取记录时出现此错误
 foreach (CSVData item in records)

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

只要您将美国文化设置用于 double(使用 . 小数点),您的代码实际上对我来说工作得很好。

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}");
        }
    }
}

这输出:

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

尝试在配置中设置文化信息。您可能还需要设置分隔符。

using (var reader = new StreamReader("c:\temp\test.csv"))
using (var csv = new CsvReader(reader))
{
    csv.Configuration.CultureInfo = new CultureInfo("en-US", false);

    csv.Configuration.Delimiter = ",";

    var records = csv.GetRecords<CSVData>();
}

您可以尝试将 CultureInfo 设置为 CurrentCulture。

csv.Configuration.CultureInfo = CultureInfo.CurrentCulture;