[前][次][番号順一覧][スレッド一覧]

rails:2309

From: osamu OHSHIMA <ohshima@p...>
Date: Fri, 03 Aug 2007 15:06:45 +0900 (JST)
Subject: [rails:2309] 動的プログラミング?


大島と申します。
ActiveRecordの使いかたというよりは、Rubyプログラミングの問題ですが
どなたか教えてください。

Excelから持ってきたtable1sを、データベースとして使い易いtable2sに変換する場合
table1s
+-------------+---------+------+-----+---------+----------------+
| Field       | Type    | Null | Key | Default | Extra          |
+-------------+---------+------+-----+---------+----------------+
| id          | int(11) | NO   | PRI | NULL    | auto_increment |
| kigyo_bango | int(11) | NO   |     |         |                |
| uke1999     | int(11) | YES  |     | NULL    |                |
| uke2000     | int(11) | YES  |     | NULL    |                |
| uke2001     | int(11) | YES  |     | NULL    |                |
| uke2002     | int(11) | YES  |     | NULL    |                |
| uke2003     | int(11) | YES  |     | NULL    |                |
| uke2004     | int(11) | YES  |     | NULL    |                |
| uke2005     | int(11) | YES  |     | NULL    |                |
| uke2006     | int(11) | YES  |     | NULL    |                |
| uke2007     | int(11) | YES  |     | NULL    |                |
+-------------+---------+------+-----+---------+----------------+
uke????には、その年の受付番号が入っている

table2s
+----------------+---------+------+-----+---------+----------------+
| Field          | Type    | Null | Key | Default | Extra          |
+----------------+---------+------+-----+---------+----------------+
| id             | int(11) | NO   | PRI | NULL    | auto_increment |
| kigyo_bango    | int(11) | NO   |     |         |                |
| uketsuke_nen   | int(11) | NO   |     |         |                |
| uketsuke_bango | int(11) | NO   |     |         |                |
+----------------+---------+------+-----+---------+----------------+

次のようなプログラムを書きましたが、どう見ても長たらしくてDRYの原則に反しています。
もっとスマートなコードにしたいのですが,どのような方法があるでしょうか。

require	"rubygems"
require_gem	"activerecord"
ActiveRecord::Base.establish_connection(省略)
class Table1 < ActiveRecord::Base
end
class Table2 < ActiveRecord::Base
end

uketsuke_moto=Table1.new
i=1
while uketsuke_moto= Table1.find(i)
  if uketsuke_moto.uke1999!=0 then
    uketsuke = Table2.new
    uketsuke.kigyo_bango=uketsuke_moto.kigyo_bango
    uketsuke.uketsuke_nen=1999
    uketsuke.uketsuke_bango =uketsuke_moto.uke1999
    uketsuke.save
   end
#以下2000年から2007年までの同じルーチンが年数分だけ繰り返し入る
  if uketsuke_moto.uke2007!=0 then
    uketsuke = Table2.new
    uketsuke.kigyo_bango=uketsuke_moto.kigyo_bango
    uketsuke.uketsuke_nen=2007
    uketsuke.uketsuke_bango =uketsuke_moto.uke2007
    uketsuke.save
   end
  i=i+1
end

--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      2307 2007-08-03 06:26 [s-kuri@s...         ] 参加します                              
->    2309 2007-08-03 08:06 ┗[ohshima@p...        ] 動的プログラミング?                  
      2310 2007-08-03 08:24  ┣[snoozer.05@g...     ]                                     
      2311 2007-08-03 09:04  ┃┗[ohshima@p...        ]                                   
      2312 2007-08-03 09:13  ┗[hisano@s...         ]                                     
      2313 2007-08-03 09:45   ┗[ohshima@p...        ]                                   
      2314 2007-08-03 09:53    ┣[snoozer.05@g...     ]                                 
      2315 2007-08-03 10:03    ┃┗[ohshima@p...        ]                               
      2316 2007-08-03 12:48    ┗[sakuro@e...         ]                                 
      2317 2007-08-03 14:16     ┗[ohshima@p...        ]