Ruby on rails 未获取CSV文件中每行的正确值
CSV: 代码:Ruby on rails 未获取CSV文件中每行的正确值,ruby-on-rails,ruby,Ruby On Rails,Ruby,CSV: 代码: 我想得到每一个名字和年龄,但它不能正常工作。在中设置:headers=>true会导致foreach为每一行生成一个对象,而不是一个普通的Ruby数组。有关更多信息,请参阅文档 要访问实际的行字段,您需要使用row.fields: CSV.foreach(filename, :headers => true) do |row| name, age = row puts name # expected Jack, but getting ["name", "Jack"]
我想得到每一个名字和年龄,但它不能正常工作。在中设置
:headers=>true
会导致foreach
为每一行生成一个对象,而不是一个普通的Ruby数组。有关更多信息,请参阅文档
要访问实际的行字段,您需要使用row.fields
:
CSV.foreach(filename, :headers => true) do |row|
name, age = row
puts name # expected Jack, but getting ["name", "Jack"]
end
我不知道有什么方法可以跳过标题,使用
CSV.foreach
,并且仍然为每一行获取一个普通数组。name,age=row.fields
的缺点是它要求标题按特定顺序排列('name'
后跟'age'
)。通常在使用CSV文件时,您不应该关心标题的顺序
让我们创建文件:
CSV.foreach(filename, :headers => true) do |row|
name, age = row.fields
puts name
end
您可以编写以下内容:
filename = 't.csv'
File.write(filename,s)
#=> 24
显示
require 'csv'
CSV.foreach(filename, :headers => true) do |row|
age, name = row.values_at('age', 'name')
puts name
puts age
end
显然,我本可以写:
Jack
38
Tom
43
看。或者(更好),您可以简单地写:
name, age = row.values_at('name', 'age')
请参阅。能否指定您使用的是哪个版本的Ruby?您得到的确切控制台输出是什么?您还可以使用
行来_a
。我希望是字段的别名,反之亦然。@yu coder,如果标题是'a'
,'b'
,'c'
,'d'
和'e'
,并且您想要'e'
和'b'
的值,您可以写b,e=row。值u在('b','e')
或'ub,e=行。字段
。这一部分是类似的,但前者的工作方式与标题的顺序无关。此外,如果我们得到感兴趣的标题的数组arr
,按照特定的顺序(例如,arr=['e','c']
),我们可以编写put row.values在(*arr)
或arr.each{header |放置行[header]}
,而这在使用字段时是有问题的。非常感谢。
Jack
38
Tom
43
name, age = row.values_at('name', 'age')
CSV.foreach(filename, :headers => true) do |row|
puts row['name']
puts row['age']
end