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... ]