Разбор csv со столбцом date.time для C # - PullRequest
0 голосов
/ 22 марта 2019

Привет, я все еще новичок в 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;
    }

IПод этим кодом указана точка останова, и она отлажена, поэтому ошибок не возникает, но выполнение кода не приводит к списку, и я не совсем уверен, как действовать.

1 Ответ

0 голосов
/ 22 марта 2019

Вам необходимо зарегистрировать свой 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");
    }
}
...