ファイルのポインタを末尾に移動して先頭に移動しても変化しない.Each系で移動しない限りlinenoは動かない.当たり前と言えば当たり前なのだ.だけど油断してた.
実験
1:1 2:2 3:3 4:4 5:5 6:6 7:7 8:8 9:9 10:10
のようなファイルを作った.
ファイルを作る
>> f = open 'a.txt' ,'w' => #<File:a.txt> >> (1..10).each {|i| f.print i, "\n" } => 1..10 >> f.close
ファイルを読み込んで見て、EOFや先頭に動かしてみる
>> f = open 'a.txt' => #<File:a.txt> >> f.lineno => 0 >> f.seek 0, IO::SEEK_END #末尾に移動 => 0 >> f.lineno => 0 #もちろんlinenoは0 >> f.read 1 => nil #EOFにあるのでファイルを読み込めない >> f.lineno = 100 #10行しかなくても100に設定できたり. => 100 >> f.rewind => 0 >> f.lineno = 1 # 1行目にセットしたら、1を読み出せる.ん? => 1 >> f.read 1 => "1" >>
ポインタなので、そりゃそうだろうとは思うけどLinenoメソッドは使い所が違うんだな.
詳しい人には当たり前だろうけどね.ちょっとビビってエントリにした.