人気ブログランキング | 話題のタグを見る

Ruby で表計算 その2

テーブルのデータを次のようにハッシュで記述するのは面倒だ。

table = [
{:name => 'Ken', :age => 24},
{:name => 'Mary', :age => 20},
{:name => 'John', :age => 31},
{:name => 'Mary Ann', :age => 3}]

そこで、

Ken, 24
Mary, 20
John, 31
Mary Ann, 3

のようなテキストファイルからテーブルのハッシュの配列をつくるメソッドを作ってみた。

def read(path)
  IO.read(path).
  split(/\n/).
  collect{|x| x.split(/,/)}.
  collect{|x| {:name => x[0], :age => x[1].to_i} }
end

これを使って、irb 上で

irb> table = read('names.txt')

とすると table に目的のハッシュの配列が取り込まれるので、前回でやったようないろいろな処理がインタラクティブにできる。

ハッシュの配列ではなくてただの2次元配列でよければ、

table = IO.read('names.txt').split(/\n/).collect{|x| x.split(/,/)}

で、一行で済んでしまう。

あるいは、Ruby 標準の CSV クラスを利用して、

require 'csv'
table = CSV.read('names.txt')

で読み込んでもよい。

また、各行がハッシュの方が良ければ、

table = []
CSV.foreach('names.txt'){|x| table.push({:name =>x[0], :age => x[1].to_i})}

とすることもできる。

いずれにせよ、個人的なデータの処理に Ruby を使うときは、データ数もそう多くはないし、やりたいのはデータ処理なのだから、プログラムはあまりデータの邪魔をしない方がいい。また、irb などを使って、対話的にすぐ結果が出る方がうれしい。
by tnomura9 | 2008-09-09 22:18 | Ruby | Comments(0)
<< Ruby で表計算 その3 Ruby で表計算 >>