当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby IO.gets用法及代码示例


本文简要介绍ruby语言中 IO.gets 的用法。

用法

gets(sep = $/, **getline_opts) → string or nil
gets(limit, **getline_opts) → string or nil
gets(sep, limit, **getline_opts) → string or nil

从流中读取并返回数据;将返回值分配给 $_

如果没有给出参数,则返回由行分隔符 $/ 确定的下一行,如果没有则返回 nil

f = File.open('t.txt')
f.gets # => "This is line one.\n"
$_     # => "This is line one.\n"
f.gets # => "This is the second line.\n"
f.gets # => "This is the third line.\n"
f.gets # => nil

如果给出了字符串参数 sep 但没有参数 limit ,则返回由行分隔符 sep 确定的下一行,如果没有,则返回 nil

f = File.open('t.txt')
f.gets(' is') # => "This is"
f.gets(' is') # => " line one.\nThis is"
f.gets(' is') # => " the second line.\nThis is"
f.gets(' is') # => " the third line.\n"
f.gets(' is') # => nil

注意 sep 的两个特殊值:

  • nil :读取并返回整个流。

  • ''(空字符串):读取并返回下一个“paragraph”,段落分隔符是两个连续的行分隔符。

给定整数参数limit,最多返回limit+1字节:

# Text with 1-byte characters.
File.open('t.txt') {|f| f.gets(1) } # => "T"
File.open('t.txt') {|f| f.gets(2) } # => "Th"
File.open('t.txt') {|f| f.gets(3) } # => "Thi"
File.open('t.txt') {|f| f.gets(4) } # => "This"
# No more than one line.
File.open('t.txt') {|f| f.gets(17) } # => "This is line one."
File.open('t.txt') {|f| f.gets(18) } # => "This is line one.\n"
File.open('t.txt') {|f| f.gets(19) } # => "This is line one.\n"

# Text with 2-byte characters, which will not be split.
File.open('t.rus') {|f| f.gets(1).size } # => 1
File.open('t.rus') {|f| f.gets(2).size } # => 1
File.open('t.rus') {|f| f.gets(3).size } # => 2
File.open('t.rus') {|f| f.gets(4).size } # => 2

使用参数 seplimit ,结合上述两种行为:

  • 返回由行分隔符 sep 确定的下一行,如果没有则返回 nil

  • 但返回不超过 limit+1 字节。

对于上述所有形式,可以给出尾随可选关键字参数;请参阅 Getline 选项:

f = File.open('t.txt')
# Chomp the lines.
f.gets(chomp: true) # => "This is line one."
f.gets(chomp: true) # => "This is the second line."
f.gets(chomp: true) # => "This is the third line."
f.gets(chomp: true) # => nil

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 IO.gets。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。