相关疑难解决方法(0)

在Ruby中读取CSV时如何跳过标题行?

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)

ruby csv

24
推荐指数
3
解决办法
2万
查看次数

忽略csv解析Rails的第一行

我正在使用本教程中的代码来解析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)

csv ruby-on-rails

13
推荐指数
2
解决办法
2万
查看次数

标签 统计

csv ×2

ruby ×1

ruby-on-rails ×1