From: ohrsts@... Date: 2007-07-07T05:44:54+09:00 Subject: [ruby-list:43673] 質問 file の保守 小原です。御世話になっています。 1行が 1レコードの file の特定のレコードを変更するには どんな方法が良いのでしょうか? あるいは、ruby の常道 では、どう処理するのでしょうか? 単純な例として、電話帳をあげます。 file名 : tel record : id:name:tel-no id=10バイト name=20バイト tel-no=15バイト record-size=10+20+15+2+1=48バイト (固定長) (最後の\nを加えて) ファイル実例 abesintaro:安部 信太郎 :0033-2222-12345 momotaro :桃太郎 :000-123-kakuu abesin-000:安部 信太郎 :012-448-5563 (以下略) id はレコードが違えば、異なるものとします。 二行目の tel-no を 000-123-otogi に変更するには どんなにするのが、ベストでしょうか? 私の思い付く方法。 -------------------------- ●方法1(Rubyレシピブック 163 の転用) 1。str="momotaro :桃太郎 :000-123-otogi " を作る。(47バイト) 2。テンポラリーファイルに該当レコードの手前までをコピーする。 3。str をテンポラリーファイルに puts する。 4。テンポラリーファイルに該当レコード以降を追加する 5。テンポラリーファイルを元のファイルにリネームする。 (レコード位置が何処にあっても良いのなら他にも、、、。) ●方法2 1。str="momotaro :桃太郎 :000-123-otogi " を作る。(47バイト) 2。f=open("tel","r+b") として該当レコードまで読みすすむ。 3。f.seek(-48,File::SEEK_CUR);f.puts(str); を実行する。(1 record 分バックして str を追加) 4。file を close して終了する。 ●方法3 1。 (具体的には、整理できないのですが) file 全体を読み込んで、1行が、1要素になる配列 ar を作る。 2。該当要素を操作して、望みのレコードに変更する。 3。ar の1要素が1行となるように、file に書き込む。 ----------------------------------------- 私に思い付くのは、このくらいです。他にもっと良い方法があると、 思いますが、教えて下さい。 また、普通はどんなに処理するのでしょうか? 良い方法とは、次のように考えています。 (a) 間違いがおこりにくい。 (b) 操作しやすい。 (c) 処理が速い。(パソコンの負担が少ない) 以上 よろしく