Ruby的CSV类可以很容易地迭代每一行:
CSV.foreach(file) { |row| puts row }
Run Code Online (Sandbox Code Playgroud)
但是,这总是包含标题行,所以我将得到输出:
header1, header2
foo, bar
baz, yak
Run Code Online (Sandbox Code Playgroud)
我不想要标题.现在,当我打电话给...
CSV.foreach(file, :headers => true)
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
#<CSV::Row:0x10112e510
@header_row = false,
attr_reader :row = [
[0] [
[0] "header1",
[1] "foo"
],
[1] [
[0] "header2",
[1] "bar"
]
]
>
Run Code Online (Sandbox Code Playgroud)
当然,因为文档说:
此设置使#shift将行返回为CSV :: Row对象而不是Arrays
但是,如何跳过标题行,将行作为简单数组返回?我不希望CSV::Row返回复杂的对象.
我绝对不想这样做:
first = true
CSV.foreach(file) do |row|
if first
puts row
first = false
else
# code for other rows
end
end
Run Code Online (Sandbox Code Playgroud) 我正在使用本教程中的代码来解析CSV文件并将内容添加到数据库表中.我如何忽略CSV文件的第一行?控制器代码如下:
def csv_import
@parsed_file=CSV::Reader.parse(params[:dump][:file])
n = 0
@parsed_file.each do |row|
s = Student.new
s.name = row[0]
s.cid = row[1]
s.year_id = find_year_id_from_year_title(row[2])
if s.save
n = n+1
GC.start if n%50==0
end
flash.now[:message] = "CSV Import Successful, #{n} new students added to the database."
end
redirect_to(students_url)
end
Run Code Online (Sandbox Code Playgroud)