ごとけんです

In message "[ruby-list:19888] File#lineno"
    on 99/12/26, Yasushi Shoji <yashi / yashi.com> writes:
>fileの行数を調べたいのですが、良い methodを見つけられません。
>
>file = File.new('...')
>file.seek 0, 2
>p file.lineno
>
>だと、0が返りますよね。これは、こういう物なんでしょうか? 気分的には
>pointerがある行番号を返してほしいのですが‥‥。

たしかにマニュアルはそういう風にも読めますが、実際は、

  file = open("foo")
  10.times{file.gets}
  p file.lineno #=> 10

などのように gets や each など行単位のポインタ移動が行われな
いと lineno は変わりません(seek や pos= は途中を読まないので)。

IO でなくて File なら、こんな感じでどうですか??

  class File
    def line_number
      to = pos
      rewind
      buf = read(to).delete!("^\n")
      buf ? buf.size : 0
    end
  end

-- gotoken