Je sais comment ça se fait par rangée
CSV.foreach(filename.csv) do |row|
puts "#{row}"
end
Mais je suis complètement perdu en termes de colonne?
C'est la solution les gars:
CSV.foreach(filename).map { |row| row[0] }
Désolé pour le poster dans le format correct si tard.
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
Accès par cols:
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]
Notez que dans le dernier cas, les colonnes sont accessibles par leur nom symbolisé et que les chaînes sont converties en nombres lorsque cela est possible.
Transpose votre fichier CSV. En faisant cela, vos lignes se transforment en colonnes et vice versa. Ci-dessous, un exemple simple de transposition.
irb(main):001:0> [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]].transpose
=> [["1", "4", "7"], ["2", "5", "8"], ["3", "6", "9"]]
Bored alors décidé de cuisiner une solution alternative ici. Ne fonctionne (ici) que si la première ligne a le nombre maximum de colonnes
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
Maintenant, vous devriez pouvoir accéder à chaque colonne par son index