22

私はそのようなYAMLファイルを持っています:

Company1:
  name: Something1
  established: 2000
#
Company2:
  name: Something2
  established: 1932

YAML ファイルの読み取り: (** UPDATE **)

    config = YAML.load_file('file.yaml')
    config.each do |key, value|
     if(key == 'name')
      company_name = value
      #year = config['Company1']['established']
      year = config.fetch(key)['established']
     end
   end

** 更新 ** 上記のコードは機能していますが、結果は次のように表示されます。

 company1 =>  {"name" => "something1"} => {"established year" => 2000"}

{} と "" を削除するにはどうすればよいですか?

4

2 に答える 2

40

これが YAML ファイルですよね?

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932

さて、この YAML ファイルは実際にはハッシュを表しています。has には、Company1、Company2 という 2 つのキーがあります (これらは主要なエントリであり、サブエントリ (name および Established) はその下にインデントされているため)。これら 2 つのキーの値もハッシュです。このハッシュには、名前と確立された 2 つのキーもあります。そして、それぞれSomething1や2000などの値を持っています.

だからあなたがするとき、

config=YAML.load_file('file.yml')

そして、print config (YAML ファイルの内容を表すハッシュ) を使用して、

puts config

次の出力が得られます。

{"Company1"=>{"name"=>"Something1", "established"=>2000}, "Company2"=>{"name"=>"Something2", "established"=>1932}}

これで、YAML ファイルで記述された Hash オブジェクトができました。

このハッシュの使用は非常に簡単です。

各会社の名前と年は、外側のハッシュ (company1、company2) によって保持される個別のハッシュに含まれているため、会社を反復処理できます。次のコードはハッシュを出力します。

config.each do |company,details|
  puts company
  puts "-------"
  puts "Name: " + details["name"]
  puts "Established: " + details["established"].to_s
  puts "\n\n"
end

したがって、各反復では、ハッシュの各 (キー、値) にアクセスできます。これは最初の繰り返しでcompany(キー)Company1details(値) を{"name"=>"Something1", "established"=>2000}

これが役に立ったことを願っています。

于 2012-11-09T18:31:58.577 に答える
4

YAML はスコープにインデントを使用するため、次のように試してください。

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932
于 2012-11-09T15:09:45.943 に答える