Используя Ruby fastcsv, хочу разбить мои файлы на 1000 строк - PullRequest
1 голос
/ 19 ноября 2010

Я сейчас занимаюсь этим:

users = User.all()

users.each do |u|

 csv << .....

end

Но мой файл слишком большой, я хочу разбить его на 1K строк на файл и назвать файл как:

users_1-1000.csv users_1001-2000.csv .etc.

Как я могу это сделать, я тоже не хочу связываться с ошибками!

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

find_in_batches идеально подходит для этого. По умолчанию find_in_batches использует :batch_size из 1000, поэтому ваш код будет выглядеть примерно так:

count = 1
User.find_in_batches do |users|
  FasterCSV.open("filename-#{count}.csv",'w') do |csv|
    users.each { |u| csv << ... }
    count += 1
  end
end
0 голосов
/ 19 ноября 2010

Вы можете сделать что-то вроде этого:

users = User.all

users.each_with_index do |u, i|
  csv << ...
end

и затем использовать индекс, чтобы узнать, когда пора переключаться на новый файл.

(i % 1000) == 0    #Open new file
(i % 1000) == 999  #Close existing file
0 голосов
/ 19 ноября 2010

Используйте метод предела и смещения AR. И меняйте смещение каждый раз, когда вы генерируете файл.

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