JSON, CSV, and Data Exchange
CSV Reading
Ruby's CSV library can read comma-separated text directly from a string.
csv parse
CSV rows can be parsed with headers so each field has a readable name.
CSV Reading
csv_reading.rb
Replay: real traced execution (multi-file project)
require "csv"
target = "Ada"
csv_text = "name,score\nAda,90\nMatz,85\nGrace,70\n"
rows = CSV.parse(csv_text, headers: true)
match = rows.find { |row| row["name"] == target }
score = match["score"].to_i
level = score >= 80 ? "ready" : "practice"
puts "target=#{target}"
puts "score=#{score}"
puts "level=#{level}"
require "csv"
target = "Matz"
csv_text = "name,score\nAda,90\nMatz,85\nGrace,70\n"
rows = CSV.parse(csv_text, headers: true)
match = rows.find { |row| row["name"] == target }
score = match["score"].to_i
level = score >= 80 ? "ready" : "practice"
puts "target=#{target}"
puts "score=#{score}"
puts "level=#{level}"
require "csv"
target = "Grace"
csv_text = "name,score\nAda,90\nMatz,85\nGrace,70\n"
rows = CSV.parse(csv_text, headers: true)
match = rows.find { |row| row["name"] == target }
score = match["score"].to_i
level = score >= 80 ? "ready" : "practice"
puts "target=#{target}"
puts "score=#{score}"
puts "level=#{level}"
target ← Ada, csv_text ← name,score\nAda,90\nMatz,85\nGrace,70\n
1require "csv"23target→ Ada = "Ada" #@target="Matz", "Grace"4csv_text→ name,score\nAda,90\nMatz,85\nGrace,70\n = "name,score\nAda,90\nMatz,85\nGrace,70\n"5rows→ name,score\nAda,90\nMatz,85\nGrace,70\n = CSV.parse(csv_text, headers: true)name,score\nAda,90\nMatz,85\nGrace,70\n67match→ Ada,90\n = rowsname,score\nAda,90\nMatz,85\nGrace,70\n.find { |row| row["name"] == target }8score→ 90 = match["score"].to_i909level→ ready = score90 >= 80 ? "ready" : "practice"1011puts "target=#{targetAda}"12puts "score=#{score90}"13puts "level=#{levelready}"outputtarget=Ada score=90 level=ready
target ← Matz, csv_text ← name,score\nAda,90\nMatz,85\nGrace,70\n
1require "csv"23target→ Matz = "Matz"4csv_text→ name,score\nAda,90\nMatz,85\nGrace,70\n = "name,score\nAda,90\nMatz,85\nGrace,70\n"5rows→ name,score\nAda,90\nMatz,85\nGrace,70\n = CSV.parse(csv_text, headers: true)name,score\nAda,90\nMatz,85\nGrace,70\n67match→ Matz,85\n = rowsname,score\nAda,90\nMatz,85\nGrace,70\n.find { |row| row["name"] == target }8score→ 85 = match["score"].to_i859level→ ready = score85 >= 80 ? "ready" : "practice"1011puts "target=#{targetMatz}"12puts "score=#{score85}"13puts "level=#{levelready}"outputtarget=Matz score=85 level=ready
target ← Grace, csv_text ← name,score\nAda,90\nMatz,85\nGrace,70\n
1require "csv"23target→ Grace = "Grace"4csv_text→ name,score\nAda,90\nMatz,85\nGrace,70\n = "name,score\nAda,90\nMatz,85\nGrace,70\n"5rows→ name,score\nAda,90\nMatz,85\nGrace,70\n = CSV.parse(csv_text, headers: true)name,score\nAda,90\nMatz,85\nGrace,70\n67match→ Grace,70\n = rowsname,score\nAda,90\nMatz,85\nGrace,70\n.find { |row| row["name"] == target }8score→ 70 = match["score"].to_i709level→ practice = score70 >= 80 ? "ready" : "practice"1011puts "target=#{targetGrace}"12puts "score=#{score70}"13puts "level=#{levelpractice}"outputtarget=Grace score=70 level=practice