简体   繁体   中英

ruby yaml don't remove header %YAML 1.1

I have a array in ruby named array, I aded value into yaml file, but after in file.yml, it remove me %YAML 1.1, so I won't

yaml_string = File.read "file.yaml"
data = YAML.load yaml_string
array.each do |value|
        data["title"] <<"- "+value+"\n"
end
output = YAML.dump data
File.write("file.yaml", output)

before execution, the header is present, but after execution it remove it (%YAML 1.1) and all lines comment with #, so I won't

I think something like this is what you're trying to do.

I'm assuming your yaml array of titles matches your array object.

Otherwise you could just use something like Enum#with_index if you just want to map the number of the yaml array to the text.

require 'psych'
filename = "sample_yaml.yml"
array = [0, 1, 2, 3]

if File.exists?(filename)
    puts "File exists. :) Parsing the yaml file."
    yaml = Psych.load_file(filename)
    array.each do |value|
        yaml[value]["title"] << " - #{value}" # find the title that matches the index number of array
    end
else
    raise ArgumentError, "bad file name"
end
puts "Outputting to reformatted yaml file"
File.open("reformatted_file.yaml", 'wb') {|f| f.write "%YAML 1.1\n" + Psych.dump(yaml)}

assuming yaml file like such

---
- title: zero
- title: one
- title: two
- title: three

Outputs

---
- title: zero - 0
- title: one - 1
- title: two - 2
- title: three - 3

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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