Bird
Raised Fist0
Rubyprogramming~20 mins

CSV library basics in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
CSV Ruby Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Ruby CSV code?
Consider this Ruby code using the CSV library. What will it print?
Ruby
require 'csv'
csv_text = "name,age\nAlice,30\nBob,25"
CSV.parse(csv_text, headers: true) do |row|
  puts "#{row['name']} is #{row['age']} years old"
end
AAlice,30\nBob,25
Bname is age years old\nAlice is 30 years old
CAlice is 30 years old\nBob is 25 years old
D30 is Alice years old\n25 is Bob years old
Attempts:
2 left
💡 Hint
Look at how CSV.parse with headers:true lets you access columns by name.
❓ Predict Output
intermediate
2:00remaining
What does this Ruby CSV code output?
Given this Ruby code snippet, what will be printed?
Ruby
require 'csv'
csv_text = "id,value\n1,100\n2,200"
rows = CSV.parse(csv_text, headers: true).map { |r| r['value'].to_i * 2 }
puts rows.join(',')
A100,200
B200,400
Cid,value
D2,4
Attempts:
2 left
💡 Hint
Remember to convert string values to integers before multiplying.
🔧 Debug
advanced
2:00remaining
Why does this Ruby CSV code raise an error?
This Ruby code raises an error. What is the cause?
Ruby
require 'csv'
csv_text = "name,age\nAlice,30\nBob,25"
CSV.parse(csv_text) do |row|
  puts row['name']
end
Arow is an Array, so row['name'] raises TypeError
BCSV.parse requires headers:true to parse correctly
CThe CSV library is not required properly
DThe CSV text is malformed and missing commas
Attempts:
2 left
💡 Hint
Check the type of row when headers option is not set.
📝 Syntax
advanced
2:00remaining
Which option correctly reads CSV with headers and prints ages?
Choose the Ruby code snippet that correctly reads CSV text with headers and prints each age.
ACSV.foreach(csv_text) { |row| puts row['age'] }
BCSV.parse(csv_text) { |row| puts row['age'] }
CCSV.read(csv_text, headers: true) { |row| puts row['age'] }
DCSV.parse(csv_text, headers: true) { |row| puts row['age'] }
Attempts:
2 left
💡 Hint
Only CSV.parse with headers:true yields rows with string keys.
🚀 Application
expert
2:00remaining
How many rows are parsed from this CSV string?
Given this Ruby code, how many rows will be parsed and printed?
Ruby
require 'csv'
csv_text = "name,score\nJohn,85\nJane,90\nDoe,78"
rows = CSV.parse(csv_text, headers: true)
puts rows.size
A3
B4
C2
D1
Attempts:
2 left
💡 Hint
Headers are not counted as rows.

Practice

(1/5)
1. What does the Ruby CSV method CSV.foreach do?
easy
A. Reads a CSV file line by line, yielding each row as an array.
B. Writes data to a CSV file line by line.
C. Converts a CSV file into a hash with headers as keys.
D. Deletes a CSV file from the system.

Solution

  1. Step 1: Understand CSV.foreach purpose

    The method CSV.foreach is designed to read CSV files line by line.
  2. Step 2: Identify the output format

    Each line is yielded as an array of strings representing the cells in that row.
  3. Final Answer:

    Reads a CSV file line by line, yielding each row as an array. -> Option A
  4. Quick Check:

    CSV.foreach reads lines as arrays [OK]
Hint: Remember: foreach reads rows, open writes rows [OK]
Common Mistakes:
  • Confusing reading with writing methods
  • Thinking it returns a hash instead of an array
  • Assuming it deletes files
2. Which of the following is the correct syntax to open a CSV file for writing in Ruby?
easy
A. CSV.read('file.csv', 'w')
B. CSV.open('file.csv', 'r') do |csv| ... end
C. CSV.foreach('file.csv') do |csv| ... end
D. CSV.open('file.csv', 'w') do |csv| ... end

Solution

  1. Step 1: Identify mode for writing

    To write to a CSV file, the mode should be 'w' (write mode).
  2. Step 2: Match syntax with CSV.open

    The correct syntax is CSV.open('file.csv', 'w') do |csv| ... end to open for writing.
  3. Final Answer:

    CSV.open('file.csv', 'w') do |csv| ... end -> Option D
  4. Quick Check:

    Open with 'w' writes CSV [OK]
Hint: Use 'w' mode with CSV.open to write files [OK]
Common Mistakes:
  • Using 'r' mode which is for reading
  • Using CSV.foreach for writing
  • Using CSV.read with mode argument
3. What will be the output of this Ruby code?
require 'csv'
CSV.foreach('data.csv') do |row|
  puts row.inspect
end

Assuming data.csv contains:
name,age
Alice,30
Bob,25
medium
A. Error: CSV.foreach requires a block
B. ["name", "age"]\n["Alice", "30"]\n["Bob", "25"]
C. ["name,age"]\n["Alice,30"]\n["Bob,30"]
D. name,age\nAlice,30\nBob,25

Solution

  1. Step 1: Understand CSV.foreach behavior

    It reads each line and yields an array of strings split by commas.
  2. Step 2: Analyze puts row.inspect output

    Using puts row.inspect prints the array representation of each row.
  3. Final Answer:

    ["name", "age"]\n["Alice", "30"]\n["Bob", "25"] -> Option B
  4. Quick Check:

    CSV.foreach yields arrays, inspect shows arrays [OK]
Hint: CSV.foreach yields arrays; inspect shows array format [OK]
Common Mistakes:
  • Expecting raw CSV string output
  • Confusing puts with print
  • Missing block for CSV.foreach
4. Identify the error in this Ruby code snippet:
require 'csv'
CSV.open('output.csv', 'w') do |csv|
  csv << 'name,age'
  csv << ['Alice', 30]
end
medium
A. The first csv << should be an array, not a string.
B. Missing require statement for CSV library.
C. The file mode 'w' is invalid for CSV.open.
D. csv << cannot accept arrays.

Solution

  1. Step 1: Check CSV.open usage for writing rows

    CSV expects each row as an array of fields, not a single string.
  2. Step 2: Identify the incorrect row format

    The line csv << 'name,age' should be csv << ['name', 'age'] to write two columns.
  3. Final Answer:

    The first csv << should be an array, not a string. -> Option A
  4. Quick Check:

    CSV rows must be arrays [OK]
Hint: Write rows as arrays, not comma strings [OK]
Common Mistakes:
  • Passing a string instead of array for a row
  • Forgetting to require 'csv'
  • Using wrong file mode
5. You want to read a CSV file and create a hash where the first column is the key and the second column is the value. Which Ruby code correctly does this using the CSV library?
hard
A. hash = CSV.read('file.csv').to_h
B. hash = CSV.open('file.csv', 'w') { |csv| csv.to_h }
C. hash = {} CSV.foreach('file.csv') do |row| hash[row[0]] = row[1] end
D. hash = CSV.foreach('file.csv') { |row| row.to_h }

Solution

  1. Step 1: Understand CSV.foreach usage for reading

    CSV.foreach reads each row as an array, allowing manual hash construction.
  2. Step 2: Build hash from first and second columns

    Assigning hash[row[0]] = row[1] correctly maps keys to values.
  3. Final Answer:

    hash = {} CSV.foreach('file.csv') do |row| hash[row[0]] = row[1] end -> Option C
  4. Quick Check:

    foreach + manual hash build = correct [OK]
Hint: Use foreach and assign hash keys manually [OK]
Common Mistakes:
  • Using CSV.read.to_h which doesn't convert arrays to hash
  • Using CSV.open with 'w' mode for reading
  • Expecting row.to_h to work directly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard