- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

簡単な使い方 Edit

読み込み Edit

読み込みと読み込んだYAMLの使い方。
基本読んだYAMLはHashとArrayになると思えばよいかと。

test.yaml

database:
  host:     localhost
  port:     5432
  user:     dbuser
  passwd:   dbpasswd

tables:

  - name:   users
    desc:   User master table
    columns:
      - name:     id
        type:     integer
        primary-key:  true
      - name:     user
        type:     varchar(32)
        not-null: true
        unique:   true
      - name:     password
        type:     varchar(32)
        not-null: true
      - name:     group_id
        type:     integer
        not-null: true

  - name:   groups
    desc:   Group master table
    columns:
      - name:     id
        type:     integer
        primary-key:  true
      - name:     group
        type:     varchar(32)
        not-null: true
        unique:   true

load_yaml.rb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$KCODE = 'u'

require 'yaml'
require 'pp'

yaml = YAML.load_file "test.yaml"

puts "---- hash ----"
puts "database.host: #{yaml["database"]["host"]}"
yaml["tables"].each do |table|
  puts "tables.*.columns[1].name: #{table["columns"][1]["name"]}"
end

puts "---- pp ----"
pp yaml

puts "---- to_yaml ----"
puts yaml.to_yaml

puts "\ndone!!"

結果

---- hash ----
database.host: localhost
tables.*.columns[1].name: user
tables.*.columns[1].name: group
---- pp ----
{"database"=>
  {"port"=>5432, "host"=>"localhost", "user"=>"dbuser", "passwd"=>"dbpasswd"},
 "tables"=>
  [{"name"=>"users",
    "desc"=>"User master table",
    "columns"=>
     [{"primary-key"=>true, "name"=>"id", "type"=>"integer"},
      {"name"=>"user",
       "not-null"=>true,
       "type"=>"varchar(32)",
       "unique"=>true},
      {"name"=>"password", "not-null"=>true, "type"=>"varchar(32)"},
      {"name"=>"group_id", "not-null"=>true, "type"=>"integer"}]},
   {"name"=>"groups",
    "desc"=>"Group master table",
    "columns"=>
     [{"primary-key"=>true, "name"=>"id", "type"=>"integer"},
      {"name"=>"group",
       "not-null"=>true,
       "type"=>"varchar(32)",
       "unique"=>true}]}]}
---- to_yaml ----
--- 
database: 
  port: 5432
  host: localhost
  user: dbuser
  passwd: dbpasswd
tables: 
- name: users
  desc: User master table
  columns: 
  - primary-key: true
    name: id
    type: integer
  - name: user
    not-null: true
    type: varchar(32)
    unique: true
  - name: password
    not-null: true
    type: varchar(32)
  - name: group_id
    not-null: true
    type: integer
- name: groups
  desc: Group master table
  columns: 
  - primary-key: true
    name: id
    type: integer
  - name: group
    not-null: true
    type: varchar(32)
    unique: true

done!!

表記の仕方 Edit

主に特殊な例

Ruby内表記YAMLでのあらわし方
nil何も書かない or null or ~
truetrue or yes or on
falsefalse or no or off
通常の文字列"(文字列)" or (文字列) と直接書いてもいい
""(空白文字列)""
Dateクラス(日付)yyyy-mm-dd
(例:2009-01-12)
DateTimeクラス(日付)yyyy-mm-dd hh:mm:ss [+-]hh:mm
(例:2009-01-12 01:12:00 +09:00)

大体そのままですね。nullだとnilになる以外は。

表記の概要はここにもありました:Rubyist Magazine - プログラマーのための YAML 入門 (初級編) むしろこっちの方が詳しい件

配列の例:irbでrequire "yaml"してあります

irb(main)> y [nil, true, false, "hage", ""]
---
-
- true
- false
- hage
- ""
=> nil

↑そのままですね

一旦文字列に変換して、またYAMLに変換してみた例(最初のyaml化が正しいかのチェック)

irb(main)> YAML.load([nil, true, false, "hage", ""].to_yaml)
=> [nil, true, false, "hage", ""]

↑問題ないですね。

ハッシュの例:

irb(main)> y({"a"=>nil, "b"=>true,"c"=>false,"d"=>"hage","e"=>""})
---
a:
b: true
c: false
d: hage
e: ""
=> nil

ま、問題ないですね。

#pre{{
irb(main):027:0> YAML.load({"a"=>nil, "b"=>true,"c"=>false,"d"=>"hage","e"=>""}.to_yaml)
=> {"a"=>nil, "b"=>true, "c"=>false, "d"=>"hage", "e"=>""}}}
}}

まあ、問題ないですね。

参考リンク Edit




Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2009-03-10 Tue 19:03:59 JST (3567d)