0
我有一个CSV文件看起来是这样的:在一个CSV中,我如何遍历列名并获得它们在标题行中的位置?
ID,Name,Age
1,John,99
我已经require
d csv
在我的Ruby脚本。
但是使用CSV
,我该如何循环通过标题行?如何找到ID
,Name
和Age
的位置编号?
我有一个CSV文件看起来是这样的:在一个CSV中,我如何遍历列名并获得它们在标题行中的位置?
ID,Name,Age
1,John,99
我已经require
d csv
在我的Ruby脚本。
但是使用CSV
,我该如何循环通过标题行?如何找到ID
,Name
和Age
的位置编号?
您的数据复制到文件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
你能请你的意思是'postition'什么有点更清晰 – Alfie
@Alfie我希望我的脚本显示ID为0,名称为1,年龄为2。 – Username
'row [0]','row [1]','row [2]'...? – spickermann