Rails - количество строк в файле

Привет. Как я могу получить общее количество строк в файле (не хочу делать это с циклом). Я читаю файл CSV.

Пример 1

CSV.open('clients.csv', 'r')

Пример 2

FasterCSV.foreach('clients.csv')

Спасибо.


person xpepermint    schedule 26.03.2010    source источник


Ответы (1)


Насколько велик ваш файл?

Этот параметр загружает весь файл в память, поэтому, если есть проблемы с размером/памятью, он может не сработать.

numrows = FasterCSV.read('clients.csv').size

Этот вариант использует встроенный в Ruby модуль CSV, который, как вы знаете, довольно медленный, но работает. Он также загружает весь файл в память:

numrows = CSV.readlines('clients.csv').size

И FasterCSV.read, и CSV.readlines возвращают массивы массивов, так что вы можете использовать любую магию массива, которую хотите, для результатов.

person Roadmaster    schedule 26.03.2010
comment
Ruby 1.9 не поддерживает FasterCSV - person VP.; 27.03.2010
comment
Тогда я полагаю, что другое решение может быть более полезным в Ruby 1.9 - оно медленное, но работает :) Спасибо за предупреждение. - person Roadmaster; 27.03.2010
comment
@VP Я думаю, что это не совсем правильно. На самом деле FasterCSV является CSV в версии 1.9: stackoverflow.com/a/6090840/603309 - person Kjellski; 06.08.2012
comment
@Roadmaster Что делать, если есть большой файл cvs (например, 1 ГБ), и мы не хотим загружать его в память? - person Meer; 11.07.2015