In Ruby I'm looking to read data until I reach a delimiter or the end of the file.
I found this is possible by redefining $/
or the $INPUT_RECORD_SEPARATOR
to my delimiter. However, with all the "features" in the Ruby language it seems hackey to change the value of a global to do this. Also, readline used to consume the delimiter, while not including it in what is returned.
Is there any other way to "read until" while consuming the delimiter that doesn't involve g开发者_C百科etting the values char by char in a loop?
Basically, all readline
-style methods from IO
accept separator string as an optional parameter:
>> s = StringIO.new('hello from string')
=> #<StringIO:0x52bf34>
>> s.readline ' '
=> "hello "
>> s.readline ' '
=> "from "
>> s.readline ' '
=> "string"
You can specify the record separator as an argument to gets, e.g.:
while line = gets("\r")
puts line
end
精彩评论