[#43713] Re: 演算子の優先順位(was: Re: irb と python のバグ?) — "きむらこういち" <hogemuta@...>

木村です。

20 messages 2007/07/14
[#43715] Re: 演算子の優先順位(was: Re: irb — TunTun-m <tntn@...> 2007/07/14

bc では次式の結果は 0.81 ではなく 0.8 になります。

[ruby-list:43673] 質問 file の保守

From: ohrsts@...
Date: 2007-07-06 20:44:54 UTC
List: ruby-list #43673
  小原です。御世話になっています。

 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) 処理が速い。(パソコンの負担が少ない)

  以上 よろしく

In This Thread

Prev Next