Ruby初心者スレッド Part 11
■ このスレッドは過去ログ倉庫に格納されています
0374デフォルトの名無しさん
2007/04/09(月) 18:07:56ファイルサイズが大きくなると単純にreadlineの繰り返しじゃ重そうなので、
1.ファイルのEOF一歩手前までシーク
2.一文字読み取り
3.\r or \nならreadline
4.そうじゃないなら一文字分手前にシーク(2から繰り返し)
って処理にしようと思いました。
File.open('./result.txt'){|f|
f.seek(-2, IO::SEEK_END)
until (c = f.getc).to_s =~ /\r|\n/
puts f.pos
f.seek(-2, IO::SEEK_CUR)
end
}
posメソッドでシーク位置を確認しているのですが、
f.seek(-2, IO::SEEK_END)
だとシーク位置が変わらず、
f.seek(-3, IO::SEEK_END)
だとシーク位置が2ずつ下がっていくと言う摩訶不思議な現象が起こっています。
原因が分かる方いらっしゃいましたら教えてください。
あと、「せっかくだから俺ならこうするぜ」みたいなのもあったらぜひぜひおねがいします。
■ このスレッドは過去ログ倉庫に格納されています