easydb.rb は何のために作ったかというと、表形式のデータをRubyのオブジェクトに変換して、データの処理を対話的に行いたいと思ったからだ。
表形式のデータというと、表計算のデータや、リレーショナルデータベースを思い浮かべやすいが、テストの成績処理や実験のデータなどデータ数は多くないがいろいろな切り口から眺めたり、非定型的な処理を行いたい場合がある。 こういうデータの扱いはいちいちプログラムするのは面倒だし、できれば統一的な入力方法で、処理も対話的にできたほうがうれしい。 easydb.rb のデータファイルの大本はコンマ区切りのフラットデータベースのテキストファイルだ。その冒頭に、データをオブジェクトに変換するためのフォーマットとデータを全部表示するためのラベルを追加している。 コンマ区切りのフラットデータベースを文字列の配列の配列にするのは簡単にできる。それを、フォーマットを使うことで文字列の配列を、数値データに変えたり、ハッシュに変換したりできる。たとえば、 apple,red bnana,yello のようなフラットファイルは最初に [['apple','red'],['bana','yellow'], ... ] という文字列の配列の配列として読み込まれるが、フラットファイルの冒頭で、 {:fruit=>x[0], :color=>x[1]} と記述することによって、[{:fruit=>'apple', :color=>'red'}, ... ] というハッシュの配列に変換することができる。したがって、おなじような発想で、 123, 456 789, 100 のようなフラットファイルは [x[0].to_i, x[1].to_i] というフォーマットを冒頭に記述することによって、 [[123, 456], [789, 100], ... ] という数値の配列の配列に変換することができる。このように、フォーマットの書き方を工夫することでほとんどの表形式のデータのオブジェクト化に対応できる。 データファイルの2行目は、スペース区切りの文字列を記入する。たとえば fruit color とかかれている場合、[{:fruit=>'apple', :color=>'red'}, ... ] のような配列のハッシュの形式のデータを表示する時のデフォールトのラベルを指定している。Hash#keys メソッドで取得できそうだが、この方法ではラベルの順序が定義したときと変わってしまう。 次の実行例は、aminoacid.txt というデータベースを読み込み、全データを表示し、特定のラベルのデータのみを表示し、表の行数を表示し、略号のアルファベット順でソートし、条件に一致したデータを表示している。これらは全てRubyの命令を利用して行うので、特別なプログラムは必要ない。 >ruby easydb.rb easydb> table, all = read('aminoacid.txt') easydb> table.dump(all) easydb> puts all easydb> table.dump('name polarity') easydb> puts table.size easydb> table.sort{|x,y| x[:let1] >=> y[:let1]}.dump(all) easydb> table.select{|x| x[:acidity] =~ /acidic/}.dump(all) easydb> exit easydb は表形式のフラットファイルをオブジェクト変換する以外のことはやっていない。データをどう活用するかはユーザ次第だが、それをRubyを対話的に扱うだけで行えるのだ。 easydb.rb の対話処理を行う部分は minirb からの流用だ。したがって、一行の式を実行するだけでなく、; と ;の間に複数の行からなるプログラムを入力することができる。 要するに、easydb.rb がやっているのはフラットファイルのオブジェクト化だけなので、どういうオブジェクトを作って、どういう処理をするのかはユーザが全てRubyで管理できるのだ。 このエントリーが、きちんとしたマニュアルになっているか自信がないが、いろいろ詳しい説明を読むよりもサンプルの aminoacid.txt を使っていろいろいじってみたほうが簡単だろう。
by tnomura9
| 2008-09-15 00:42
| Ruby
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||