Как стать автором
Обновить

Ruby & Ccsv. FasterCSV не такой уж и faster

Время на прочтение 1 мин
Количество просмотров 655
Предстала задача вытащить инфу с большого csv-файла (50 Мб).
Всегда пользовался FasterCSV, но так как он открывал этот файл больше минуты, начал поиски настоящего faster-а.
Без помощи гугла не обошлось.
Ccsv — быстрая и легкая либа для работы с Csv-файлами.

Ccsv реализован на C и подточен под Ruby. Как видите и разница во времени выполнения большая:

user system total real
6.050000 0.460000 6.510000 ( 6.868348) - ccsv
60.540000 5.350000 65.890000 ( 68.840146) - fastercsv
17.400000 0.430000 17.830000 ( 18.786114) - простой split (file.each_line {|row| columns = row.split})


Были и грабли. Ccsv идет как gem и по умолчанию имеет разделитель ','.
Пришлось ручками добавить его как параметр:

static VALUE foreach(VALUE self, VALUE filename, VALUE delimetr) {...}

void
Init_ccsv()
{
rb_cC = rb_define_class("Ccsv", rb_cObject);
rb_define_singleton_method(rb_cC, "foreach", foreach, 2);
}


Пример использования:
Ccsv.foreach(filename, ",\n") { |row| row[0] }

Оригинал библиотеки тут тут

Теги:
Хабы:
+5
Комментарии 0
Комментарии Комментировать

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн