アミノ酸データベースを改造して、テキストファイルからデータベースを取り込めるようにした。時間がないので詳しい説明は後で加筆予定。
ファイル名: easydb.rb (evalは半角英数に修正してください) class Array def dump(label) format = 'print ' + label.split(/ /).collect{|x| 'x[:'+x+']'}.join('," ",') + ', "\n"' puts label self.each{|x| eval format} end end def read(path) data = IO.read(path).split(/\n/) format = data.shift label = data.shift raise 'format error' if format =~ /system|open/ return data.collect{|x| x.split(/,/)}.collect{|x| eval format}, label end def ml prog = "" while true print 'lines*> ' line = gets break if line == ";\n" prog << line end return prog end loop do begin print "easydb> " line = gets if line == ";\n" then line = ml end eval(line, TOPLEVEL_BINDING) rescue SyntaxError, LoadError, StandardError STDERR.puts "Warning: #$!" end end 取り込むデータベースはテキストファイルで最初の行にフォーマット、次の行にデフォールトで表示するときのラベル、その下にコンマ区切りのデータを記述する。つぎのファイルがその例だ。 ファイル名: aminoacid.txt {:name=>x[0],:let3=>x[1],:let1=>x[2],:polarity=>x[3],:acidity=>x[4], :hydropathy=>x[5]} name let3 let1 polarity acidity hydropathy Alanine ,Ala,A,nonpolar,neutral , 1.8 Arginine ,Arg,R,polar ,basic (strongly),-4.5 Asparagine ,Asn,N,polar ,neutral ,-3.5 Aspartic acid,Asp,D,polar ,acidic ,-3.5 Cysteine ,Cys,C,nonpolar,neutral , 2.5 Glutamic acid,Glu,E,polar ,acidic ,-3.5 Glutamine ,Gln,Q,polar ,neutral ,-3.5 Glycine ,Gly,G,nonpolar,neutral ,-0.4 Histidine ,His,H,polar ,basic (weakly) ,-3.2 Isoleucine ,Ile,I,nonpolar,neutral , 4.5 Leucine ,Leu,L,nonpolar,neutral , 3.8 Lysine ,Lys,K,polar ,basic ,-3.9 Methionine ,Met,M,nonpolar,neutral , 1.9 Phenylalanine,Phe,F,nonpolar,neutral , 2.8 Proline ,Pro,P,nonpolar,neutral ,-1.6 Serine ,Ser,S,polar ,neutral ,-0.8 Threonine ,Thr,T,polar ,neutral ,-0.7 Tryptophan ,Trp,W,nonpolar,neutral ,-0.9 Tyrosine ,Tyr,Y,polar ,neutral ,-1.3 Valine ,Val,V,nonpolar,neutral , 4.2 ブログの表示の制限でフォーマットが折り返して表示されているが、修正して一行にしておかないと動作しない。 実行例は次のようになる。表を読み込む read では、左辺にテーブルを格納する変数と、テーブルのデフォールトのラベルを格納する変数をおく。テーブルを表示する dump ではデフォールトのラベルがないので、このラベルを使うことに注意。あとは、アミノ酸データベースと同じように、テーブルオブジェクトをRuby の関数で自由に処理できる。 実行例 > ruby easydb.rb easydb> table, all = read('aminoacid.txt') easydb> table.dump(all) ...... easydb> table.select{|x| x[:polarity] =~ /^polar/}.dump(all) ...... easydb> ; easydb> for i in 1..10 easydb> puts table[i][:name] easydb> end easydb> ; ......
by tnomura9
| 2008-09-12 19:25
| Ruby
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||