这是我的代码:
begin
items = CSV.read('somefile.csv')
linesAmount = CSV.readlines('somefile.csv').size
counter = 1
while linesAmount >= counter do
fullrow = items[counter]
firstitem = fullrow[0] #This is the line that my code doesn't like.
puts firstitem
counter = counter + 1
end
end
对于某些人来说,Ruby似乎不喜欢那一行,即我有firstitem = fullrow [0]。它会抛出未定义的方法[]错误。但是,在控制台中,我仍然可以看到它打印出了第一个项目...所以它仍然会打印它,但是还会抛出错误?到底怎么回事?
然而,如果我将while循环中的前三行放在while循环外,并注释掉循环中的所有内容,除了计数器行,那么我就不会得到任何错误。因此,如果firstitem行出现在while循环之外,代码认为一切正常。
编辑:我知道数组从0开始,但我特意希望计数器不关心第一行。我忘了提到,抱歉。
编辑2:谢谢大家,我通过在linesAmount后添加-1解决了它,现在它可以运行了!
counter == linesAmount
时,它是第linesAmount+1
行,而items[counter]
是可预测的nil。因此,fullrow
为空,导致错误。你在控制台上看到的是前一个循环打印出来的值。顺便说一句,整个代码看起来太像PHP了。在这里使用items.each
会更合适。 - Aleksei Matiushkin