0

我有这样的数据集:

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")

但它不会创建数组。

4

2 回答 2

7

学习如何使用序列化程序做任何事情的一个好方法是尝试编写一段代码来演示往返:

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 在生成输出时对其进行排序。我将输出重定向到一个文件并将其用作起点。

于 2012-08-29T01:45:23.237 回答
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"]
于 2012-08-29T00:34:59.583 回答