1

すべてのハッシュ値を保存したい 1 つの列を持つ CSV があります。nokogiri sax を使用して xml ドキュメントを解析し、CSV に保存しています。私はこのようなxml値を取得して@infodata[:academic] = @content.inspectいます: ハッシュには次のキーがあります:

@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
4

2 に答える 2

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
于 2012-04-07T13:01:58.270 に答える
0

@joelparkerhenderson が話している join メソッドは、2 つの配列値を取り、それらを結合するだけです。

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をご覧ください。

于 2012-04-08T22:38:23.293 に答える