我在 yaml 文件中有以下数据 -
---
- :Subject_list
Subject 1:
:Act 1: A
:Act 2: B
Subject 2:
:Skill 1:
:Act 1: B
:Act 2: B
:Skill 2:
:Act 1: B
我需要从这个文件中读取数据并生成如下所示的输出 - 对于主题 1,它将是这样的,因为它没有技能水平。表示数组的第一个元素为空。
["","Act 1", "A"], ["","Act 2", "B"]
第二个主题是这样的——
["Skill 1","Act 1", "B"], ["","Act 2" "B"],["Skill 2","Act 1", "B"]
我正在使用这些值生成一个 prawn pdf 表。任何帮助是极大的赞赏。
我试过这样做 -
data=YAML::load(File.read("file.yaml"));
subject = data[:Subject_list]
sub_list =["Subject 1", "Subject 2"]
sub_list.each do |sub|
sub_data = []
sub_data = subject["#{sub}"]
# I convert the list symbol to an array, so i can loop through the sub activities.
#I need some direction here as how to check whether the symbol will be a skill or activity
end
干杯!
最佳答案
首先,你的 yaml 文件不是正确的 YAML,你不能有这样的键,如果你有空格或奇怪的地方,你需要引用它们,开头的 : 是怎么回事?
"Subject_list":
"Subject 1":
"Act 1": A
"Act 2": B
"Subject 2":
"Skill 1":
"Act 1": B
"Act 2": B
"Skill 2":
"Act 1": B
然后您需要正确加载文件。您在 YAML 模块上调用方法 load_file。在 ruby afaik 中没有用于方法访问的::。
require 'yaml'
data = YAML.load_file "file.yaml"
subject = data["Subject_list"]
require 'pp'
subject.each do |s|
item = s.last
if item.keys.first =~ /Skill/
pp item.keys.inject([]) { |memo,x| item[x].map { |i| memo << i.flatten.unshift(x) } ; memo}
else
pp item.map { |k,v| ["", k, v] }
end
end
关于ruby - 从 yaml 文件中读取数据并在 ruby 中生成一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8799523/