2012-04-07 92 views
1

我有一個CSV列,我喜歡將其所有散列值保存在其中。我正在使用nokogiri sax解析xml文檔,然後將其保存爲CSV。我得到了XML的值是這樣的:@infodata[:academic] = @content.inspect哈希具有以下鍵:如何將散列值保存爲CSV

@infodata = {} 
@infodata[:titles] = Array.new([]) 
@infodata[:identifier] 
@infodata[:typeOfLevel] 
@infodata[:typeOfResponsibleBody] 
@infodata[:type] 
@infodata[:exact] 
@infodata[:degree] 
@infodata[:academic] 
@infodata[:code] 
@infodata[:text] 

當我現在使用此代碼遍歷鍵並將其保存到CSV:

def end_document 
CSV.open("info.csv", "wb") do |row| 
    for key, val in @infodata 
    row << [val,] 
    end 
end 
puts "Finished..."  
end 

我得到的輸出是:

"""avancerad""" 
"""Ingen examen""" 
"""uh""" 
"""Arkivvetenskap""""Archival science""" 
"""HIA80D""" 
"""10.300""" 
"""uoh""" 
"""Arkivvetenskap rör villkoren för befintliga arkiv och modern arkivbildning med fokus på arkivarieyrkets arbetsuppgifter: bevara, tillgängliggöra och styra information. Under ett år behandlas bl a informations- och dokumenthantering, arkivredovisning, gallring, lagstiftning och arkivteori. I kursen ingår praktik, där man under handledning får arbeta med olika arkivarieuppgifter.""" 
"""statlig""" 
"""60""" 

如何得到的輸出是這樣的:

"avancerad", "Ingen examen", "uh", "Arkivvetenskap", "Archival science", "HIA80D", 10.300,"uoh", "Arkivvetenskap rör villkoren för befintliga arkiv och modern arkivbildning med fokus på arkivarieyrkets arbetsuppgifter: bevara, tillgängliggöra och styra information. Under ett år behandlas bl a informations- och dokumenthantering, arkivredovisning, gallring, lagstiftning och arkivteori. I kursen ingår praktik, där man under handledning får arbeta med olika arkivarieuppgifter.", "statlig", 60 
+0

什麼是 「正確的」;你想要的輸出是什麼? – Phrogz 2012-04-07 12:47:13

+0

檢查編輯@Phrogz – SHUMAcupcake 2012-04-07 12:55:38

回答

0

的加入方法@joelparkerhenderson大約只需要兩個數組值和togheter加入他們的會談。

您可以使用flatten分離,並創建一個新的數組是這樣的:

# Open the CSV for writing 
CSV.open("info.csv", "wb") do |csv| 
    # Write the entire row all at once 
    csv << @infodata.values.flatten 
end 

更多詳情:http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-flatten

2

我想我明白你的一般性問題,所以也許這可以幫助你:

# Flatten the titles Array into one String 
@infodata[:titles] = @infodata[:titles].join(", ") 

# Open the CSV for writing 
CSV.open("info.csv", "wb") do |csv| 
    # Write the entire row all at once 
    csv << @infodata.values 
end 
+0

爲了保存標題,您可能希望在打開文件後直接添加'csv << @ infodata.keys'。 – Jakobinsky 2012-04-07 13:09:49

+0

請@joelparkerhenderson查看整個代碼:https://gist.github.com/2328752。我應該在構造函數中拼合散列嗎? – SHUMAcupcake 2012-04-07 13:10:55

+0

我明白你現在的答案,但我不認爲問題出在那裏.. – SHUMAcupcake 2012-04-07 13:20:47