Remember that File.readlines reads the whole file at once, so it may not be good for very large files.
Use chomp to remove the newline character from each line if you don't want it.
Summary
File.readlines reads all lines from a file into an array.
Each line includes the newline character unless removed with chomp.
It is useful for simple line-by-line file processing.
Practice
(1/5)
1. What does File.readlines('example.txt') return in Ruby?
easy
A. A hash with line numbers as keys and lines as values
B. A string containing the entire file content
C. An array where each element is a line from the file, including newline characters
D. An integer representing the number of lines in the file
Solution
Step 1: Understand File.readlines behavior
File.readlines reads the whole file and returns an array of lines.
Step 2: Check line content format
Each line includes the newline character at the end unless removed by chomp.
Final Answer:
An array where each element is a line from the file, including newline characters -> Option C
Quick Check:
File.readlines returns array of lines [OK]
Hint: Remember: File.readlines returns an array of lines with newlines [OK]
Common Mistakes:
Thinking it returns a single string
Assuming it returns a hash or dictionary
Believing it returns just the line count
2. Which of the following is the correct syntax to read all lines from a file named data.txt into an array in Ruby?
easy
A. File.read_lines[]('data.txt')
B. File.read('data.txt')
C. File.read_lines('data.txt')
D. File.readlines('data.txt')
Solution
Step 1: Recall correct method name
The correct Ruby method to read lines is File.readlines (no underscore or plural misspelling).
Step 2: Check method call syntax
The method is called with parentheses and the filename as a string argument.
Final Answer:
File.readlines('data.txt') -> Option D
Quick Check:
Correct method name and syntax = File.readlines('data.txt') [OK]
Hint: Use exact method name: File.readlines('filename') [OK]
Common Mistakes:
Using underscores instead of camel case
Misspelling the method name
Omitting parentheses or using wrong brackets
3. Given a file notes.txt with these lines:
Line 1
Line 2
Line 3
What will the following Ruby code output?
lines = File.readlines('notes.txt')
puts lines[1]
medium
A. Line 2
B. Line 1
C. Line 3
D. nil
Solution
Step 1: Understand File.readlines output
The file lines are read into an array: ["Line 1\n", "Line 2\n", "Line 3\n"].
Step 2: Access the second element
Array indexing starts at 0, so lines[1] is "Line 2\n".
Final Answer:
Line 2 -> Option A
Quick Check:
Index 1 = second line = Line 2 [OK]
Hint: Remember arrays start at 0; lines[1] is second line [OK]
Common Mistakes:
Assuming indexing starts at 1
Forgetting newline characters affect output
Expecting nil for valid index
4. What is wrong with this Ruby code snippet?
lines = File.readlines('file.txt')
lines.each do |line|
puts line.chomp
end
Assuming file.txt exists and is readable.
medium
A. It will skip the first line of the file
B. Nothing is wrong; it correctly prints each line without newlines
C. It will print lines with extra newlines
D. It will raise an error because chomp is not a method
Solution
Step 1: Analyze File.readlines usage
File.readlines reads all lines into an array, each ending with a newline.
Step 2: Check iteration and chomp usage
Using each to iterate and chomp removes trailing newline before printing.
Final Answer:
Nothing is wrong; it correctly prints each line without newlines -> Option B
Quick Check:
chomp removes newline, so output is clean [OK]
Hint: Use chomp to remove newlines when printing lines [OK]
Common Mistakes:
Thinking chomp is invalid method
Expecting extra newlines despite chomp
Assuming lines are skipped
5. You want to read a file data.txt and create a new array containing only lines that include the word "error" (case insensitive). Which Ruby code correctly does this using File.readlines?
hard
A. File.readlines('data.txt').select { |line| line.downcase.include?('error') }
B. File.readlines('data.txt').map { |line| line.include?('error') }
C. File.readlines('data.txt').filter { |line| line.include?('Error') }
D. File.readlines('data.txt').reject { |line| line.downcase.include?('error') }
Solution
Step 1: Use File.readlines to get all lines
This returns an array of lines from the file.
Step 2: Filter lines case-insensitively
Use select to keep lines where line.downcase.include?('error') is true.
Step 3: Check other options
File.readlines('data.txt').map { |line| line.include?('error') } uses map which returns booleans, not lines. File.readlines('data.txt').filter { |line| line.include?('Error') } checks case-sensitive 'Error'. File.readlines('data.txt').reject { |line| line.downcase.include?('error') } rejects lines with 'error', opposite of requirement.
Final Answer:
File.readlines('data.txt').select { |line| line.downcase.include?('error') } -> Option A