Как передать пользовательский формат даты в CsvProvider в F # - PullRequest
0 голосов
/ 12 апреля 2019

Я использую CsvProvider для анализа файла CSV, который я получаю из внешнего источника. Формат даты файла - дд / мм / гг. Но CsvProvider выводит его как MM / dd / yy и неправильно вводит все даты.

Можно ли как-нибудь передать формат даты в CsvProvider?

Я могу прочитать даты в виде строки, а затем преобразовать их с помощью Seq.Map в Datetime (это два шага).

Я пытаюсь выяснить, могу ли я сделать за один шаг

Пример

файл csv sample.csv содержит данные, подобные приведенным ниже

11/01/90
12/01/90
13/01/90
14/01/90
15/01/90

Я использую приведенный ниже код F #

type MyCsvProvider = CsvProvider<Sample= "sample.csv", HasHeaders=false, Schema="Date (date)">
MyCsvProvider.Load("sample.csv")

1 Ответ

0 голосов
/ 13 апреля 2019

У провайдера типа CsvProvider нет способа явно указать формат для разбора дат, поэтому если у вас есть какой-то совершенно нестандартный формат, вам просто нужно будет прочитать его как string (вот что Поставщик CSV делает вывод, что не может автоматически анализировать даты), а затем анализирует значения даты явно.

При этом вы можете указать параметр Culture, который позволяет анализировать даты в формате, распространенном в странах за пределами США. Например, ваш формат даты будет нормально работать с культурой en-GB (в Великобритании вы сначала пишете день, затем месяц, а затем год).

В следующем небольшом примере свойство Test выводится как DateTime:

type A = CsvProvider<"""Test
11/01/90
12/01/90
13/01/90
14/01/90
15/01/90""",Culture="en-GB">

let r = A.GetSample().Rows |> Seq.head
r.Test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...