2012-04-19 62 views
2

輸入文件的樣子:我如何逐行使用Ruby將csv轉換爲數組?

 
dog,white,male 
cat,purple,female 
rat,gray,male 

,我想通過和與行的數據,線做的事情。

File.open("animals.csv") 
    while file has next line 
    currentline = array with each cell being an entry in the array 
    if currentline[0] == dog 
     put "dogs are cool" 
    end 
    put "your animal is a " + currentline[0] 
    end 

你明白了吧?我想用ifs和whatnot操作數據行,並在最後打印出來。

謝謝

回答

-1

您可以使用魔法塊來清理您的線條閱讀代碼。下面的代碼將關閉你的句柄,並且每次只讀一行,而不需要額外的緩衝。

IO.foreach("animals.csv") do |line| 
    parts = line.split(',') 
    ... 
end 

如前所述有一個CSV庫,但如果你的數據並不複雜,沒有嵌入的逗號和whatenot,上面是合理的。

另請注意,您想比較字符串「狗」,而不是一些名爲狗的變量。要使字符串用引號括起來,否則ruby會認爲它是一個變量或者可能是一個方法調用。

if currentline[0] == "dog" 
+0

爲什麼另起爐竈?你有CSV類,使用它。 「如果你的數據不復雜」不是一個有效的理由,海事組織。 – St0rM 2018-01-26 09:59:44

2
require 'csv' 
CSV.foreach("animals.csv") do |row| 
    puts 'dogs are cool' if row[0] == 'dog' 
    puts "your animal is a #{row[0]}" 
end