将CSV解析为多行,其中每个值都在其标题后打印

时间:2011-11-01 17:54:40

标签: ruby arrays csv hashtable

使用Ruby 1.9.2我需要解析一个CSV文件,并输出每个标题键和单个值组合在一起的行,并带有行号。

标题:key1,key2,key3
第1行:a,b,c
row2:d ,, f

预期产出:

1
key1 a
key2 b
key3 c

2

key1 d
KEY2
key3 f

现在正在努力将标题与值结合起来,而且我很难做到。

require 'csv'

header = File.open('TEXT.CSV', &:readline) 
keys = header.split(",")


values = CSV.read("TEXT.CSV")

def combine(a,b)
  zipped = a.zip(b)
  Hash[zipped]
end

keyvalue = values.each do |i|
  combine(keys,i)
end

我在那里做错了什么想法?

2 个答案:

答案 0 :(得分:1)

我认为这是一种更简单的方法:

require 'csv'
csv = CSV.read('branch.csv', :headers => true)
csv.each do |line|
  puts csv.headers.zip(line.fields)
end

# =>    
key1
a
key2
b
key3
c
key1
d
key2

key3
f

答案 1 :(得分:0)

require 'csv'
lineN = 0

CSV.read( filename  ).each do |arr|
  if lineN == 0
    headers = arr
  else
    puts "line #{lineN}"

    headers.zip(arr).each do |a|
      puts "#{a.first} : #{a.last}"
    end
  end
  lineN += 1
end

创建:

line 1
key1 : a
key2 : b
key3 : c

line 2
key1 : d
key2 : 
key3 : f