2017-02-01 2 views
-2

URL、完全修飾ドメイン名(FQDN)、ドメイン、IPアドレス、IPアドレスの範囲が含まれているCSVファイルがあります。そして、私は、次の形式でYAMLファイルに変換したいと思います:Rubyを使ってCSVファイルをYAMLファイルに変換するには?

entity:  
    name: "company name" 
    network_names: 
    url: 
     - 'scheme://host:port/path?query' 
     - 'http://www.example.com/software/index.html' 
    fqdn: 
     - 'mymail.somecollege.edu' 
    domain: 
     - 'somecollege.edu' 


    network_addresses: 
    ipv4: 
     single_ip: 
     - 111.11.111.1 
     range: 
     - 111.11.111.0-111.11.11.255 

問題はすべてがIPアドレスがある最初の行ではなく、上の例では、CSVファイル上に混在していることです次の行にはURLまたはFQDNがあります。

私は、行にIPアドレス、URL、FQDN、またはドメインが含まれているかどうかを確認し、そこからYAMLファイルを作成する必要があると考えていました。

しかし、YAMLファイルのフィールドを指定するにはどうすればよいですか?私はRubyプログラミングとYAMLの新機能です。

+1

あなたのCSVはどのように見えますか? –

+0

CSVのサイズと行数はいくつですか?私は自分自身のパーサーを書いてハッシュに入れて、次に* Hash.to_yaml * – Roger

+1

を使用します。あなたのコードはどのように見えますか? *特定のものとは何か問題がありますか?エラーメッセージが表示されますか?どれ?間違った結果が出ますか?どのような結果が得られ、どのような結果が必要ですか?見るために[mcve]を提供してください。 –

答えて

0

ここに基本的な構造があります。 CSV.parseは、ハッシュとして見える行の配列を返すことができます。配列とハッシュは両方ともYAMLに簡単に変換できます:

require 'yaml' 
require 'csv' 

csv = "ip,something,domain 
x,y,z 
a,b,c 
m,n,o" 

data = [] 

CSV.parse(csv, headers: true).each do |row| 
    hash = row.to_h 
    # hash looks like : 
    # {"ip"=>"x", " something"=>"y", " domain"=>"z"} 
    # Apply desired logic to it 
    data << hash 
end 

puts data.to_yaml 
# --- 
# - ip: x 
# something: y 
# domain: z 
# - ip: a 
# something: b 
# domain: c 
# - ip: m 
# something: n 
# domain: o 
関連する問題