【问题标题】:Parse CSV into multiple lines where each value is printed after its header将 CSV 解析为多行,其中每个值都打印在其标题之后
【发布时间】:2011-12-19 17:10:21
【问题描述】:

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

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

预期输出:

1
关键1个
key2 b
key3 c

2

key1 d
关键2
关键3f

目前正在将标头与值结合起来,但我失败得很厉害。

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

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

【问题讨论】:

    标签: ruby arrays csv hashtable


    【解决方案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
    

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-26
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多