Как я могу прочитать файл YAML?

У меня есть такой файл YAML:

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

чтение файла YAML: (** ОБНОВЛЕНИЕ **)

    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"}

как я могу удалить {} и ""?

Ответы

Ответ 1

Хорошо, так ли это ваш файл YAML?

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932

Теперь этот файл YAML на самом деле представляет хеш. У этого есть два ключа, то есть Company1, Company2 (потому что они являются ведущими вхождениями, а подзаголовки (имя и установленные) отступают под ними). Значение этих двух ключей снова является хешем. У этого хэша также есть 2 ключа, а именно имя и установлены. И они имеют такие значения, как Something1 и 2000 соответственно.

Итак, когда вы это сделаете,

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

И распечатать config (который представляет собой хэш, представляющий содержимое файла YAML), используя

puts config

вы получаете следующий результат:

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

Итак, у нас есть объект Hash, как описано в файле YAML.

Использование этого хэша довольно прямолинейно.

Поскольку каждое название компании и год входят в отдельный хеш, хранящийся в внешнем хеше (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 (key) как Company1 и details (значение) как {"name"=>"Something1", "established"=>2000}

Надеюсь, что это помогло.