2016-04-30 43 views
0

我有一个CSV文件看起来是这样的:在一个CSV中,我如何遍历列名并获得它们在标题行中的位置?

ID,Name,Age 
1,John,99 

我已经require d csv在我的Ruby脚本。

但是使用CSV,我该如何循环通过标题行?如何找到IDNameAge的位置编号?

+1

你能请你的意思是'postition'什么有点更清晰 – Alfie

+0

@Alfie我希望我的脚本显示ID为0,名称为1,年龄为2。 – Username

+0

'row [0]','row [1]','row [2]'...? – spickermann

回答

1

您的数据复制到文件x.csv后,我在执行IRB如下:

2.3.0 :009 > require 'csv' 
=> false 
2.3.0 :010 > csv = CSV.read 'x.csv' 
=> [["ID", "Name", "Age"], ["1", "John", "99"]] 
2.3.0 :010 > csv = CSV.read 'x.csv' 
=> [["ID", "Name", "Age"], ["1", "John", "99"]] 
2.3.0 :011 > header_line = csv[0] 
=> ["ID", "Name", "Age"] 
2.3.0 :012 > header_line[0] 
=> "ID" 
2.3.0 :013 > header_line[1] 
=> "Name" 
2.3.0 :014 > header_line[2] 
=> "Age" 

...所以这是你能做到这一点的一种方式;使用read来获得一个数组数组,并假设第一个是一个列标题数组。

在现实世界中,你可能不会想将整个文件读入内存在一次,将使用CSV.foreach

#!/usr/bin/env ruby 

data = [] 
CSV.foreach('x.csv') do |values_in_row| 
    if @column_names # column names already read; this must be a data line 
    data << values_in_row # just an example 
    # do something with values_in_row 
    else 
    @column_names = values_in_row 
    end 
end 

puts "Column names are: #{@column_names.join(', ')}" 
puts "Data lines are:" 
puts data 
相关问题