Hatena::ブログ(Diary)

はけの徒然日記 このページをアンテナに追加 RSSフィード

2005 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 04 | 05 | 08 | 09 | 10 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 02 | 03 | 04 | 11 | 12 |
2012 | 02 | 03 | 05 |
2014 | 02 | 03 | 04 | 05 | 12 |
2015 | 05 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 |

2006-09-11(Mon)

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"

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hake/20060911/p1