JSON, CSV, and Data Exchange
CSV Writing
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
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}"
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 }12endcsv_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 }12endline_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
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 }12endcsv_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 }12endline_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
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 }12endcsv_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 }12endline_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