From: rubikitch@... Date: 2007-07-08T05:14:25+09:00 Subject: [ruby-list:43682] Re: 質問 file の保守 From: ohrsts@lapis.plala.or.jp Subject: [ruby-list:43680] Re: 質問 file の保守 Date: Sat, 7 Jul 2007 21:00:24 +0900 るびきちです。 > また、file の保守(追加 変更 削除)は普通どんなに処理するので > しょうか? fileのサイズ、どんなデータが入っているか、などに依ります。 僕は面倒なので、だいたい10MBまでのファイルに関しては「方法3」を使います。 IOとレコード変更処理を分離できてテストが楽だからです。 最近のハードウェアはメモリをたくさん積んでいるので富豪的に。 open(file, "r+b") do |io| do_edit(io) end こんな風にIOオブジェクトを引数にわたすといいです。 do_editをテストするときはStringIOクラスを使うとファイルを媒介せずにテストできます。 ファイルのフリをした文字列です。 # もっと小さいファイルに関してはFile.readで一気にStringにしてしまいます。 今扱っているのは固定長レコードなので n 番目のレコードだとわかれば open(file, "r+b") do |f| f.seek(48*(n-1)) f.write(str) end とできるでしょう。巨大なファイルに効果抜群です。 # ファイルを開くときはブロックを使うのがRuby Wayです。 > わざわざ script を作るまでもなく、emacs 等のエディタのほうが、やりや > すいケースもあるかも、とも思えます。 その処理が一度きりであれば、エディタでかまわないでしょう。 何度もするようであれば小さいものであってもscriptを作るべきです。 その部分を自動化することで楽をできますから。 -- rubikitch http://www.rubyist.net/~rubikitch/