Я пытаюсь разобрать даты из большого файла csv в Racket.
Самый простой способ сделать это - создать новую структуру date
. Но для этого требуются параметры week-day
и year-day
. Конечно, у меня их нет, и это кажется настоящей слабостью модуля date
, который я не понимаю.
Итак, в качестве альтернативы я решил использовать find-seconds
для преобразования необработанных дат даты в секунды, а затем передать это на seconds->date
. Это работает, но жестоко медленно.
(time
(let loop ([n 10000])
(apply find-seconds '(0 0 12 1 1 2012)) ; this takes 3 seconds for 10000
;(date 0 0 12 1 1 2012 0 0 #f 0) ; this is instant
(if (zero? n)
'done
(loop (sub1 n)))))
find-seconds
занимает 3 секунды, чтобы сделать 10000 значений, и у меня есть несколько миллионов. Создание структуры date
, конечно, мгновенно, но у меня нет значений дня, дня и дня.
Мои вопросы:
1.) Почему требуется week-day
/year-day
для создания структур даты?
2.) Предполагается ли find-seconds
быть таким медленным (т.е. ошибка)? Или я делаю что-то неправильно?
3.) Есть ли какие-либо альтернативы для синтаксического анализа даты. Я знаю, что srfi/19
имеет функцию string->date
, но мне пришлось бы изменить все, чтобы использовать эту модульную структуру вместо встроенной встроенной утилиты. И он может пострадать так же, как и в секундах find-seconds, я не уверен.