2014-09-25 17 views
0

我有一個值的映射,關鍵是一個文件名,值是一個數組字符串。 我有相應的文件我可以操縱yaml文件並將它們再次寫出嗎

我怎樣將加載該文件並創建包含該數組的值的值是否已經存在

例如固定YAML值

YAML(file.yaml)

trg::azimuth: 
-extra 
-intra 
-lateral 

trg::azimuth: 
    [extra,intra,lateral] 

RUBY

{"file.yaml" => ["extra","intra","lateral"]} 
+0

這是不明確的,你要做什麼。 'trg :: azimuth:'從哪裏來?它不在你的示例散列中,並且在任何地方都沒有解釋。 – 2014-09-25 17:41:27

+0

trg :: azimuth:是一個靜態值,我期望在yaml中看到不會改變 – 2014-09-26 05:23:21

回答

1

YAML documentation不包括它的方法非常好,但是嗎? ay

底層實現是libyaml wrapper Psych。

作爲YAML基礎的Psych documentation涵蓋了閱讀,解析和發射YAML。

這裏的基本流程:

require 'yaml' 

foo = {"file.yaml" => ["extra","intra","lateral"]} 
bar = foo.to_yaml 
# => "---\nfile.yaml:\n- extra\n- intra\n- lateral\n" 

而這裏的產生,系列化bar變量是什麼樣子,如果寫的:

puts bar 
# >> --- 
# >> file.yaml: 
# >> - extra 
# >> - intra 
# >> - lateral 

這是一個YAML解析器需要的格式:

baz = YAML.load(bar) 
baz 
# => {"file.yaml"=>["extra", "intra", "lateral"]} 

在這一點上,散列已經從Ruby散列中往返,到YAML序列化的字符串,回到Ruby哈希。

寫YAML的文件很容易使用Ruby的File.write方法:

File.write(foo.keys.first, foo.values.first.to_yaml) 

foo.each do |k, v| 
    File.write(k, v.to_yaml) 
end 

這將導致一個名爲 「file.yaml」 文件,其中包含:

--- 
- extra 
- intra 
- lateral 

要讀取和解析文件,請使用YAML的load_file方法。

foo = YAML.load_file('file.yaml') 
# => ["extra", "intra", "lateral"] 

How do I parse a YAML file?」可能是使用的,以及在本頁面右側的其他「相關」鏈接。

相關問題