ruby - 从 yaml 文件中读取数据并在 ruby​​ 中生成一个数组

标签 ruby 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

我需要从这个文件中读取数据并生成如下所示的输出 - 对于主题 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/

相关文章:

arrays - 如何按相同元素对数组进行分组?

ruby - 如果存在,如何重命名散列中的键

ruby-on-rails - 为什么 Array.count 在开发模式下可用但在生产模式下不可用?

ruby-on-rails - 在 WIndows 10 和 ruby​​ 版本 2.5.0-1 上安装 SASS 时出错

json - 在 Elastic Beanstalk 单实例上配置 SSL

amazon-web-services - 从 CloudFormation 模板中的 DropDownList 选择多个值

amazon-web-services - CloudFormation YAML 结合 FN::GEtAtt 和 !Ref 来列出 id

ruby - 使用 Ruby CSV header 转换器

yaml - 如何在 Terraform 中使用 yaml 文件?

kubernetes - 如何在单个 openshift yaml 模板中拥有多种对象类型?