быстрое автоматическое угадывание строк даты - PullRequest
3 голосов
/ 19 июля 2010

Для огромного количества огромных CSV-файлов (более 100 миллионов строк) из разных источников мне нужен быстрый фрагмент или библиотека, чтобы автоматически угадать формат даты и преобразовать его в разбитое время или метку времени Unix. После успешного угадывания фрагмент должен иметь возможность проверять последующие вхождения поля даты на достоверность, поскольку существует вероятность того, что формат даты изменяется по всему файлу.

Тестовый набор форматов даты должен быть переменным, но компилировать оптимальное дерево решений или что-то из ряда заданных форматов даты вполне нормально.

Я пришел к выводу, что ничего подобного не существует, но все же я должен провести «исследование рынка», поэтому мой вопрос.

Моей первой попыткой было подражать getdate () для 23 различных форматов дат, которые я наблюдал до сих пор, и заменить анализаторы чисел оптимизированными версиями с учетом характеристик, специфичных для даты (без '4' до '9' в часть дня 10, номера «3» - «9» части месяца и т. д.)

Кто-нибудь сталкивался с подобной проблемой или даже создавал подобный код?

Ответы [ 2 ]

1 голос
/ 13 августа 2010

После двух недель чрезмерного поиска в Интернете, я пришел к выводу, что должен написать это сам. FTW, мой первый опыт: http://github.com/hroptatyr/glod

1 голос
/ 20 июля 2010

Я имел дело с датированными метками времени (структурно CSV) в более чем пятидесяти форматах из многочисленных источников с помощью сценария Perl. Никогда не был ограничен по функциональности, и хотя он основан на сценариях, он был достаточно быстрым (> 10Klines / sec, где строка была ~ 60-100 символов) Я реализовал а) проанализировать первые пару сотен строк, перемотать и затем запустить ... чтобы создать контекст для логики принятия решений. б) испустить ошибочные строки с номером строки и контекстом ... чтобы в конце цикла можно было редактировать ошибочные строки, а затем устанавливать их для повторной вставки при последующем запуске, чтобы можно было без ошибок пропатчить, т. е. каждая строка соответствовала бы формату в) разница во времени между линиями ... допускается только увеличение временных отметок. г) также я мог бы переформатировать другие вещи, такие как изменение единиц, т.е. имперский в СИ. Хотя из лагеря C, простой Perl не слишком чужд, но сделал его намного проще Примечание. Этот метод может решить такие проблемы, как 10/04/05, например, ДД / ММ / ГГ или ММ / ДД / ГГ, если в файле достаточно информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...