YAMLを用いた状態の保存、復帰
require 'yaml' hash_data = { "item1" => "hoge", "item2" => "fuga", } array_data = [ 1, 2, [31, 32] ] # 保存 f = open("config.yaml", "w") f.write(YAML.dump(hash_data)) f.write(array_data.to_yaml) #YAML.dumpと同等 f.close # 復帰 # YAMLが1ブロックの場合 printf "\n---case of 1 block---\n" p array_data2 = YAML.load_file("config.yaml") # 複数ブロックの場合 printf "\n---case of n blocks---\n" str = open("config.yaml", "r").read stream = YAML.load_stream(str).documents.each{|doc| p doc }
実行結果
$ ./test.rb hoge.yaml case of 1 block {"item1"=>"hoge", "item2"=>"fuga"} case of n blocks {"item1"=>"hoge", "item2"=>"fuga"} [1, 2, [31, 32]]
ファイルの中身(YAMLフォーマット)
--- item1: hoge item2: fuga --- - 1 - 2 - - 31 - 32
ルビリストマガジンの中級編までの抜粋。
データの保存、復帰(シリアライズ、デシリアライズ)はYAMLでやると便利らしい。
YAMLは簡潔で可読性が高いから。中間フォーマットとして使ったりもできるんだろう。
ま、簡単なところでここら辺から、ということ。
YAMLは行頭が”- ”のときは配列、"〜: 〜"という形のときはハッシュ。先頭に半角スペースを入れることで入れ子にできる。記号の後に半角スペースを入れることに注意する。"---"はブロック区切り。数、文字列などは自動的に判別されるが、"- !str 3.14"などと明示的に指定することも可能。