В Ruby, как читать столбцы данных из CSV файла?

Я знаю, как это делается по-разному

CSV.foreach(filename.csv) do |row|
  puts "#{row}"
end

Но я полностью потерял столбец?

Ответ 1

Это ребята решения:

col_data = []
CSV.foreach(filename) {|row| col_data << row[0]}
puts col_data

Извините за отправку его в правильном формате настолько поздно.

Ответ 2

test.csv:

name,surname,no1,no2,no3,date
Raja,Palit,77489,24,84,12/12/2011
Mathew,bargur,77559,25,88,01/12/2011
harin,Roy,77787,24,80,12/12/2012
Soumi,paul,77251,24,88,11/11/2012

Устанавливается по столбцам:

require 'csv'
csv = CSV.read('test.csv', :headers=>true)
p csv['name'] #=>["Raja", "Mathew", "harin", "Soumi"]

#or even:
t = CSV.table('test.csv')
p t[:no1] #=> [77489, 77559, 77787, 77251]

Обратите внимание, что в последнем случае доступ колов осуществляется по их символическому имени и что строки, когда это возможно, преобразуются в числа.

Ответ 3

Транспонировать ваш CSV файл. Делая это, ваши строки скрыты до столбца и наоборот. Ниже простой пример транспонирования.

   irb(main):001:0> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]].transpose
    => [["1", "4", "7"], ["2", "5", "8"], ["3", "6", "9"]]

Ответ 4

Скучно, поэтому решил приготовить альтернативное решение здесь. Работает только (здесь), если первая строка имеет максимальное количество столбцов

columns = {}
rows.first.each_with_index do |col, i|
  columns[i] = []
end
rows.each do |row|
  row.each_with_index do |cell, i|
    columns[i] = columns[i] + [cell]
  end
end

Теперь вы можете иметь доступ к каждому столбцу по индексу