Разобрать YAML по значению ключа и включить категории yaml - PullRequest
0 голосов
/ 08 мая 2018

Искал, чтобы разобрать файл YAML в строки простого ключа = значения.

У меня есть некоторая начальная структура, но я также хотел получить некоторые ключи из yaml.

test:
   line1: "line 1 text"
   line2: "line 2 text"
   line3: "line 3 text"
options:
    item1: "item 1 text"
    item2: "item 2 text"
    item3: "item 3 text"

Ruby:

File.open("test.yml") do |f|  
  f.each_line do |line|
    line.chomp

    if line =~ /:/
        line.chop
        line.sub!('"', "")
        line.sub!(": ", "=")
        line.gsub!(/\A"|"\Z/, '')
        printline = line.strip
        puts "#{printline}"
        target.write( "#{printline}")
    end
  end
end

Результаты в настоящее время выглядят как

test:
line1=line 1 text
line2=line 2 text
line3=line 4 text
options:
item1=item 1 text
item2=item 2 text
item3=item 3 text

Но я хочу добавить категорию, как:

test/line1=line 1 text
test/line2=line 2 text
test/line3=line 3 text
options/item1=item 1 text
options/item2=item 2 text
options/item3=item 3 text

Как лучше всего включить категорию для каждой строки?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы можете использовать файл YAML # load_file, прочитать каждую строку и адаптировать ее под свои нужды:

foo = YAML.load_file('file.yaml').map do |key, value|
  value.map { |k, v| "#{key}/#{k}=#{v}" }
end
foo.each { |value| puts value }

# test/line1=line 1 text
# test/line2=line 2 text
# test/line3=line 3 text
# options/item1=item 1 text
# options/item2=item 2 text
# options/item3=item 3 text
0 голосов
/ 08 мая 2018

Вы можете легко конвертировать YAML в хеш:

#test.yml
test:
   line1: "line 1 text"
   line2: "line 2 text"
   line3: "line 3 text"
options:
    item1: "item 1 text"
    item2: "item 2 text"
    item3: "item 3 text"


#ruby
hash = YAML.load File.read('test.yml')

Теперь вы можете делать все что угодно с хэшем, получать ключи, значения и т. Д.

hash['options']['item1'] #=> "item 1 text"
hash['test']['line1'] #=> "line 1 text"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...