YAML
Rubyの勉強
構造化したデータを表現するフォーマットで、XMLと比べて人間がアクセスしやすい形式。インデントでネストの深さを指定する。以下のサンプルでは変数に対して入出力をしているけど、当然ファイルに対しても可能
参考サイト:http://jp.rubyist.net/magazine/?0009-YAML
require 'yaml' hash1 = {"key1" => 100, "key2" => 200} hash2 = {"key3" => "300", "key4" => "abc"} array = ["foo", "bar"] int = 999 bool = true null = nil a = [hash1, hash2, array, int, bool, null] str = YAML.dump(a) puts str # => --- # => - key1: 100 # => key2: 200 # => - key3: "300" # 文字列の場合は「"」で囲まれる # => key4: abc # => - - foo # => - bar # => - 999 # => - true # => - # nilは何も出力しない b = YAML.load(str) p b[0] # => {"key1"=>100, "key2"=>200} p b[1] # => {"key3"=>"300", "key4"=>"abc"} #-------------------------------------------------- a = [0, [1 ,[10, 11]], 2] str = YAML.dump(a) puts str # => --- # => - 0 # => - - 1 # => - - 10 # => - 11 # => - 2 tree = YAML.parse(str) p tree.search("/*") # => ["/0", "/1", "/2"] p n = tree.select("/0") # => [#<YAML::Syck::Scalar:0x292b268>] n.each{|i| p i.transform} # => 0 p n = tree.select("/1/1/1") # => [#<YAML::Syck::Scalar:0x292a8cc>] n.each{|i| p i.transform} # => 11 #-------------------------------------------------- str = "" str =<<EOS 山田太郎: TEL: 123-4567 MAIL: taro@foo.com 田中次郎: TEL: 987-6543 MAIL: jiro@foo.com EOS s = YAML.load(str) p s.size # => 2 p s["山田太郎"] # => {"MAIL"=>"taro@foo.com", "TEL"=>"123-4567"} p s["山田太郎"]["TEL"] # => "123-4567" tree = YAML.parse(str) puts tree.search("/*") # => /山田太郎 # => /田中次郎 puts tree.search("/*/*") # => /山田太郎/MAIL # => /山田太郎/TEL # => /田中次郎/TEL # => /田中次郎/MAIL p n = tree.select("/山田太郎/TEL") # => [#<YAML::Syck::Scalar:0x29231d0>] n.each{|i| p i.transform} # => "123-4567" n = tree.select("/*/MAIL") n.each{|i| p i.transform} # => "taro@foo.com" # => "jiro@foo.com"