使用date.time列将csv解析为C#

问题描述 投票:0回答:1

嗨,我仍然是C#的新手,我正在使用Csvhelper

我试过读一下列出的csv文件

SurgicalDeviceId	CreatedAt
-1	1/01/2000 0:00
-2	1/01/2000 0:00
1	19/02/2019 12:39
2	19/02/2019 12:39
3	19/02/2019 12:39

我已经这样映射了;

public class Instrument
    {
        //csv map
        public int SurgicalDeviceId { get; set; }
        public DateTime CreatedAt { get; set; }
    }
    public sealed class InstrumentMap : ClassMap<Instrument>
    {
        public InstrumentMap()
        {
            Map(m => m.SurgicalDeviceId);
            Map(m => m.CreatedAt);
        }
    }

我的阅读文本是这样的;

public static List<Instrument> SplitCsv(string csv)
    {
        var textReader = new StringReader(@"D:\CSVStuff\Jasper.csv");

        var csvr = new CsvReader(textReader);

        var instrumentList = csvr.GetRecords<Instrument>().ToList();

        return instrumentList;
    }

我已经在这个代码下面进行了测试,并且它已经过调试,因此没有出现错误,但运行代码不产生任何列表,我不太确定如何继续。

csv datetime parsing csvhelper
1个回答
0
投票

在获取记录之前,您需要注册ClassMap。您还应该让读者使用语句,以便妥善处理他们的资源。

public static List<Instrument> SplitCsv(string csv)
{
   using(var textReader = new StreamReader(@"D:\CSVStuff\Jasper.csv"))
   using(var csvr = new CsvReader(textReader))
   {
      csvr.Configuration.RegisterClassMap<InstrumentMap>();

      var instrumentList = csvr.GetRecords<Instrument>().ToList();

      return instrumentList;
   }
}

您的文化信息可能会正确处理日期。在我的计算机上它抛出了一个错误,因此您可能需要将TypeConverterOption添加到您的ClassMap中。

public sealed class InstrumentMap : ClassMap<Instrument>
{
    public InstrumentMap()
    {
        Map(m => m.SurgicalDeviceId);
        Map(m => m.CreatedAt).TypeConverterOption.Format("d/MM/yyyy H:mm");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.