Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

what does .seek means in ruby

what is the purpose of f.seek(0) in this script? Why do we need to rewind(current_file), if the file has already been opened by the program?

input_file = ARGV[0]

def print_all(f)
    puts f.read()
end

def rewind(f)
    f.seek(0)
end

def print_a_line(line_count,f)
puts "#{line_count} #{f.readline()}"
end

current_file = File.open(input_file)

puts "First Let's print the whole file:"
puts # a blank line

print_all(current_file)

puts "Now Let's rewind, kind of like a tape"

rewind(current_file)

puts "Let's print the first line:"

current_line = 1
print_a_line(current_line, current_file)
like image 990
Ahmed Taker Avatar asked Feb 07 '14 01:02

Ahmed Taker


People also ask

What does :+ mean in Ruby?

inject(:+) is not Symbol#to_proc, :+ has no special meaning in the ruby language - it's just a symbol.

What is :& in Ruby?

The and keyword in Ruby takes two expressions and returns “true” if both are true, and “false” if one or more of them is false. This keyword is an equivalent of && logical operator in Ruby, but with lower precedence.


1 Answers

It seeks ("goes to", "attempts to find") a given position (as integer) in a stream. In your code you define a new method called rewind which takes one argument. When you call it with

rewind(current_file)

you send the current_file (the one you have opened from disk or from anywhere else) which is defined as:

current_file = File.open(input_file)

to the rewind method and it will "seek" to position 0 which is the beginning of the file.

You could also create another method called almost_rewind and write:

def almost_rewind(f)
  f.seek(-10, IO::SEEK_END)
end

This would go 10 positions backwards in your stream, starting from the END of the stream.

like image 170
Nikolai Manek Avatar answered Sep 28 '22 08:09

Nikolai Manek