繁体   English   中英

同步两个YAML文件

[英]Synchronize two YAML files

是否有用于同步两个YAML文件的插件? 例如file1有

en:
   key1: "Value1"
   key2: "Value2"
es:
   key1: "EsValue1"

同步后,需要在不干扰顺序的情况下在第二个文件中添加key2:“ Value2”,并在第二个文件中添加key1。

我不确定这是否会保持您想要的顺序,但是如果您使用Ruby 1.9,则很可能会使用排序的哈希。 您可以使用YAML.load_file将YAML文件的内容读YAML.load_file ,然后执行以下操作:

merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
es.merge(en, &merger)

然后将es哈希再次转储到YAML文件。

建议在此处提出递归合并的解决方案: http : //www.ruby-forum.com/topic/142809#635081

您实际上并不需要插件即可:

str = <<EOT
en:
  key1: "Value1"
  key2: "Value2"
es:
  key1: "EsValue1"
EOT

require 'yaml'
yaml = YAML::load(str)

(hash['en'].keys - hash['es'].keys).each{ |k| hash['es'][k] = hash['en'][k] }

>> ap hash #=> nil
{
    "en" => {
        "key1" => "Value1",
        "key2" => "Value2"
    },
    "es" => {
        "key1" => "EsValue1",
        "key2" => "Value2"
    }
}

如果您要处理其他任意数量的哈希:

(yaml.keys - ['en']).each do |h|
  (yaml['en'].keys - yaml[h].keys).each do |k|
    yaml[h][k] = yaml['en'][k]
  end
end

因此,读取YAML文件,通过代码运行生成的哈希,然后再次写入文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM