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 に答える