将数据从YAML加载到数组中

时间:2012-08-29 00:13:41

标签: ruby yaml

我有这样的数据集:

5.3.12.0
5.3.12.1
5.3.12.2
5.3.12.3 
5.3.12.4

如何在YAML文件中构建它,然后将其作为简单数组加载到Ruby中?

我希望将上面的数据加载为如下数组:

fileset_levels = ["5.3.12.0", "5.3.12.1", "5.3.12.2", "5.3.12.3", "5.3.12.4"]

我想要加载多组这些数组,所以我希望有一个名为:

的文件
vuln1.yml
vuln2.yml

并将它们全部加载为我可以在我的Ruby脚本中使用的数组。

我试过了:

vuln1_array = yaml::load("vuln1.yml")

但它不会创建数组。

2 个答案:

答案 0 :(得分:6)

学习如何使用序列化程序执行任何操作的好方法是尝试编写一段代码来演示往返:

require 'yaml'

puts %w[
  5.3.12.0
  5.3.12.1
  5.3.12.2
  5.3.12.3 
  5.3.12.4
].to_yaml

哪个输出:

---
- 5.3.12.0
- 5.3.12.1
- 5.3.12.2
- 5.3.12.3
- 5.3.12.4

创建往返看起来像:

require 'pp'
require 'yaml'

pp YAML.load(
  %w[
    5.3.12.0
    5.3.12.1
    5.3.12.2
    5.3.12.3 
    5.3.12.4
  ].to_yaml
)

现在输出:

=> ["5.3.12.0", "5.3.12.1", "5.3.12.2", "5.3.12.3", "5.3.12.4"]

此过程的优点是您可以看到它应该是什么样子,并学习如何解析它。

我使用类似的过程来生成用于配置文件的复杂YAML文档。虽然我们可以从头开始创建它们,但是使用简单的Ruby数组和散列更容易,然后让YAML在生成输出时对其进行排序。我将输出重定向到一个文件,并将其作为起点。

答案 1 :(得分:2)

你称之为yaml文件,但这只是一个基本文件。 Yaml就像一个哈希结构,你有一个匹配值的键。这里只是一个值列表。

你能做的是

>> file = File.read('vuln1.yml')
=> "5.3.12.0\n5.3.12.1\n5.3.12.2\n5.3.12.3 \n5.3.12.4\n"
>> file.split("\n")
=> ["5.3.12.0", "5.3.12.1", "5.3.12.2", "5.3.12.3 ", "5.3.12.4"]