CSV.generate builds comma-separated text from Ruby arrays.

csv generate Writing CSV starts with rows of values, then Ruby turns those rows into text.

CSV Writing

quantity
csv_writing.rb
Replay: real traced execution (multi-file project)
require "csv"

quantity = 3
item = "notebook"
rows = [
  ["item", "quantity"],
  [item, quantity]
]

csv_text = CSV.generate do |csv|
  rows.each { |row| csv << row }
end

line_count = csv_text.lines.count
last_line = csv_text.lines.last.strip

puts "item=#{item}"
puts "quantity=#{quantity}"
puts "lines=#{line_count}"
puts "csv=#{last_line}"
require "csv"

quantity = 1
item = "notebook"
rows = [
  ["item", "quantity"],
  [item, quantity]
]

csv_text = CSV.generate do |csv|
  rows.each { |row| csv << row }
end

line_count = csv_text.lines.count
last_line = csv_text.lines.last.strip

puts "item=#{item}"
puts "quantity=#{quantity}"
puts "lines=#{line_count}"
puts "csv=#{last_line}"
require "csv"

quantity = 5
item = "notebook"
rows = [
  ["item", "quantity"],
  [item, quantity]
]

csv_text = CSV.generate do |csv|
  rows.each { |row| csv << row }
end

line_count = csv_text.lines.count
last_line = csv_text.lines.last.strip

puts "item=#{item}"
puts "quantity=#{quantity}"
puts "lines=#{line_count}"
puts "csv=#{last_line}"
  1. quantity ← 3, item ← notebook, rows ← [["item", "quantity"], ["notebook", 3]]

    1require "csv"23quantity→ 3 = 3  #@quantity=1, 54item→ notebook = "notebook"5rows→ [["item", "quantity"], ["notebook", 3]] = [6  ["item", "quantity"],7  [itemnotebook, quantity3]8]910csv_text = CSV.generate do |csv|11  rows.each { |row| csv << row }12end
  2. csv_text ← item,quantity\nnotebook,3\n

    10csv_text→ item,quantity\nnotebook,3\n = CSV.generate do |csv#<CSV io_type:StringIO encoding:US-ASCII lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">|11  rows[["item", "quantity"], ["notebook", 3]].each { |row| csv << row }12end
  3. line_count ← 2, last_line ← notebook,3

    14line_count→ 2 = csv_text.lines.count215last_line→ notebook,3 = csv_text.lines.last.stripnotebook,31617puts "item=#{itemnotebook}"18puts "quantity=#{quantity3}"19puts "lines=#{line_count2}"20puts "csv=#{last_linenotebook,3}"
    outputitem=notebook
    quantity=3
    lines=2
    csv=notebook,3
  1. quantity ← 1, item ← notebook, rows ← [["item", "quantity"], ["notebook", 1]]

    1require "csv"23quantity→ 1 = 14item→ notebook = "notebook"5rows→ [["item", "quantity"], ["notebook", 1]] = [6  ["item", "quantity"],7  [itemnotebook, quantity1]8]910csv_text = CSV.generate do |csv|11  rows.each { |row| csv << row }12end
  2. csv_text ← item,quantity\nnotebook,1\n

    10csv_text→ item,quantity\nnotebook,1\n = CSV.generate do |csv#<CSV io_type:StringIO encoding:US-ASCII lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">|11  rows[["item", "quantity"], ["notebook", 1]].each { |row| csv << row }12end
  3. line_count ← 2, last_line ← notebook,1

    14line_count→ 2 = csv_text.lines.count215last_line→ notebook,1 = csv_text.lines.last.stripnotebook,11617puts "item=#{itemnotebook}"18puts "quantity=#{quantity1}"19puts "lines=#{line_count2}"20puts "csv=#{last_linenotebook,1}"
    outputitem=notebook
    quantity=1
    lines=2
    csv=notebook,1
  1. quantity ← 5, item ← notebook, rows ← [["item", "quantity"], ["notebook", 5]]

    1require "csv"23quantity→ 5 = 54item→ notebook = "notebook"5rows→ [["item", "quantity"], ["notebook", 5]] = [6  ["item", "quantity"],7  [itemnotebook, quantity5]8]910csv_text = CSV.generate do |csv|11  rows.each { |row| csv << row }12end
  2. csv_text ← item,quantity\nnotebook,5\n

    10csv_text→ item,quantity\nnotebook,5\n = CSV.generate do |csv#<CSV io_type:StringIO encoding:US-ASCII lineno:0 col_sep:"," row_sep:"\n" quote_char:"\"">|11  rows[["item", "quantity"], ["notebook", 5]].each { |row| csv << row }12end
  3. line_count ← 2, last_line ← notebook,5

    14line_count→ 2 = csv_text.lines.count215last_line→ notebook,5 = csv_text.lines.last.stripnotebook,51617puts "item=#{itemnotebook}"18puts "quantity=#{quantity5}"19puts "lines=#{line_count2}"20puts "csv=#{last_linenotebook,5}"
    outputitem=notebook
    quantity=5
    lines=2
    csv=notebook,5