そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

Ruby 18「蔵書データをCSVファイルに保存しよう」&19「蔵書データをPStoreに保存しよう」

nasne (ナスネ) (CECH-ZNR1J)買ってiPad経由で録画再生できるようになって引きこもり生活が色々捗る今日この頃。
でも購入タイミングのせいで一話はPS3本体だったいするので、消化しようにも消化できてない番組が結構あったりする・・・
iPadアプリ側の再生の精度とか操作性とかの使い勝手が上がればなぁというのと、torne・nasne側の録画データの移動ができればなぁという所だが、それでも今のところは十分に満足。



そんなこんなでRubyの学習。

作りながら学ぶRuby入門 第2版

作りながら学ぶRuby入門 第2版


第18章では前部までに作成していた蔵書データをCSVとしてファイルに保存・読み込みする。

この章で新たに出てきたものは以下
カンマ区切り分割の際に複数要素への代入

a, b, c, d, e = line.chomp.split(',')

Perlでも下記のように書けるけど、

(a, b, c, d, e) = split /,/, chomp(line);

()が無くて良い分だけ楽。


Dataクラスのインスタンス作成

require 'date'
date = Date.strptime([日付文字列], [フォーマット])

で作成可能。
PerlでいうTime::Pieceみたいなことができる。

use Time::Piece;
my $date = Time::Piece->strptime([日付文字列], [フォーマット])

取り出せる出力とかもほとんど同じなのが有難い。
ちなみにRubyのフォーマット指定は"%Y-%m-%d"型なら省略可能。
DBからの取り出しとかで使用頻度が高いので有難い。




第19章はハッシュのようにデータをファイルに読み書きできるPStoreを用いた方法について。
下記のようにPstoreクラスを作成する。

require 'pstore'
db = PStore.new( 'dbfile' )


transactionメソッドを用いて任意のキーを指定してデータの読み書きができる。

db.transaction do
  db["キー"] = 値
  puts db["キー"]
end

endでtransactionメソッドを抜けるタイミングでファイルが保存される。
また、transaction(true)のようにすることで書き込みを禁止できる。

保存されてるキーはrootsメソッドで読み取り可能。

db.transacton(true) do
  db.roots.each{ |key|
    puts "#{db[key]}"
  }
end


存在確認はroots?メソッドで行う。
また、削除はdeleteメソッドで。

db.transaction do
  if db.roots?(キー)
    db.delete(キー)
  end
end


Perlでこれに当たるにはStorableかなと思うけど、こっちの方がすっきり書けるし、読み取り専用が可能だったりで何かと便利にできてる気はする。

ところで19章の中で正規表現にif /パターン/ =~ 変数みたいな構文が出てきて「あれ?」と思ったけどRubyってこれOKなんですね。