#f#
#f#
Вопрос:
Я использую CsvProvider для анализа CSV-файла, который я получаю из внешнего источника. Формат даты файла — дд / ММ / гг. Но CsvProvider выводит его как MM / dd / yy и получает все даты неправильно.
Могу ли я каким-либо образом передать формат даты в CsvProvider?
Я могу прочитать даты как строку, а затем преобразовать их с помощью Seq.Map в Datetime (что составляет два шага).
Я пытаюсь выяснить, могу ли я сделать это за один шаг
Пример
образец csv-файла.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:
У 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
Комментарии:
1. Спасибо, Томас. Я буду жить с вашим решением, поскольку лучшего варианта нет.