2017-02-01 1 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 파일의 필드는 어떻게 지정합니까? 나는 루비 프로그래밍과 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 
관련 문제