2012-04-07 15 views
1

Ich habe eine CSV mit einer Spalte, die ich gerne alle meine Hash-Werte speichern möchte. Ich benutze Nokogiri Sax, um ein XML-Dokument zu analysieren und dann in einer CSV-Datei zu speichern. Ich erhalte die xml-Wert wie folgt aus: @infodata[:academic] = @content.inspect Der Hash haben die folgenden Tasten:So speichern Sie Hashwerte in eine CSV

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

Wenn ich diesen Code jetzt eine Schleife durch die Tasten und das CSV speichern:

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

die Ausgabe, die ich erhalte, ist:

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

Wie bekomme ich die Ausgabe wie folgt aus:

"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

Was "richtig" ist; Was ist der Output, den Sie wünschen? – Phrogz

+0

Überprüfen Sie die Bearbeitung @Phrogz – SHUMAcupcake

Antwort

0

Verfahren beitreten, die sie spricht über nur nimmt die zwei Array-Wert und schließt sich togheter @joelparkerhenderson.

Sie können flatten verwenden zu trennen und ein neues Array wie folgt zu erstellen:

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

Lesen Sie mehr unter: http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-flatten

2

Ich glaube, ich Ihre allgemeine Frage verstehen, vielleicht kann dieser Ihnen helfen:

# 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

Sie können 'csv << @ infodata.keys' direkt nach dem Öffnen der Datei hinzufügen, um die Header zu erhalten. – Jakobinsky

+0

Bitte @joelparkerhenderson den gesamten Code hier überprüfen: https://gist.github.com/2328752. Soll ich den Hash im Konstruktor abflachen? – SHUMAcupcake

+0

Ich verstehe, dass Sie jetzt antworten, aber ich glaube nicht, dass das Problem dort liegt. – SHUMAcupcake

Verwandte Themen