Я пытаюсь разобрать даты из большого 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 -секунд, я не уверен.