From: James Edward Gray II Date: 2006-11-30T02:40:48+09:00 Subject: Re: Splitting a CSV file into 40,000 line chunks On Nov 29, 2006, at 9:32 AM, Drew Olson wrote: > Any advice on making the code nicer is appreciated. I'll let you decide if this is any better: Firefly:~/Desktop$ ls gen_csv.rb split_csv.rb Firefly:~/Desktop$ ruby gen_csv.rb Firefly:~/Desktop$ ls data.csv gen_csv.rb split_csv.rb Firefly:~/Desktop$ cat data.csv rec_no,whatever 0,"blah, blah, blah, ..." 1,"blah, blah, blah, ..." 2,"blah, blah, blah, ..." 3,"blah, blah, blah, ..." 4,"blah, blah, blah, ..." 5,"blah, blah, blah, ..." 6,"blah, blah, blah, ..." 7,"blah, blah, blah, ..." 8,"blah, blah, blah, ..." 9,"blah, blah, blah, ..." 10,"blah, blah, blah, ..." 11,"blah, blah, blah, ..." 12,"blah, blah, blah, ..." 13,"blah, blah, blah, ..." 14,"blah, blah, blah, ..." 15,"blah, blah, blah, ..." 16,"blah, blah, blah, ..." 17,"blah, blah, blah, ..." 18,"blah, blah, blah, ..." 19,"blah, blah, blah, ..." Firefly:~/Desktop$ ruby split_csv.rb data.csv Firefly:~/Desktop$ ls data.csv data_part_2.csv data_part_4.csv gen_csv.rb data_part_1.csv data_part_3.csv data_part_5.csv split_csv.rb Firefly:~/Desktop$ cat data_part_1.csv rec_no,whatever 0,"blah, blah, blah, ..." 1,"blah, blah, blah, ..." 2,"blah, blah, blah, ..." 3,"blah, blah, blah, ..." Firefly:~/Desktop$ cat data_part_3.csv rec_no,whatever 8,"blah, blah, blah, ..." 9,"blah, blah, blah, ..." 10,"blah, blah, blah, ..." 11,"blah, blah, blah, ..." Firefly:~/Desktop$ cat split_csv.rb #!/usr/bin/env ruby -w require "rubygems" require "faster_csv" original_file = ARGV.shift counter = 1 FCSV.open(original_file.sub(".", "_part_#{counter}."), "w") do |out| FCSV.open(original_file, :headers => true).each_with_index do | row, index| if (index % 4).zero? if index.nonzero? counter += 1 out.reopen(original_file.sub(".", "_part_#{counter}."), "w") end out << row.headers end out << row end end __END__ James Edward Gray II