使用ruby读取和编辑CSV文件时使用标题

时间:2016-03-03 08:19:05

标签: ruby csv

假设我使用这样的代码对CSV文件进行内联编辑:

CSV.open(fn, 'r+') do |f|
  old_pos = f.pos
  while r = f.shift
    if r[0] == 'NOT_PROCESSED'
      f.seek(old_pos)
      r[0] = 'PASSED       ' # pay attention to the padding spaces!
      f << r
    end

    old_pos = f.pos
  end
end

有没有办法以这种方式以某种方式使用标头?比如r ['STATUS']?我应该如何重写代码才能实现这一目标?

1 个答案:

答案 0 :(得分:1)

CSV.open有一个名为options的第三个参数,您可以在其中添加various个选项,包括:headers

  

<强>:标头
  如果设置为:first_rowtrue,则CSV文件的初始行将被视为一行标题。如果设置为Array,则内容将用作标题。如果设置为StringString将通过::parse_line调用:col_sep:row_sep:quote_char进行调用实例生成一个标头数组。此设置会导致#shift将行返回为CSV::Row个对象,而不是Arrays和#read,以返回CSV::Table个对象而不是数组数组。

CSV.open(fn, 'r+', headers: true) do |f|
  old_pos = f.pos
  while r = f.shift
    if r['STATUS'] == 'NOT_PROCESSED'
      f.seek(old_pos)
      r['STATUS'] = 'PASSED       ' # pay attention to the padding spaces!
      f << r
    end

    old_pos = f.pos
  end
end