假设我使用这样的代码对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']?我应该如何重写代码才能实现这一目标?
答案 0 :(得分:1)
CSV.open
有一个名为options
的第三个参数,您可以在其中添加various个选项,包括:headers
:
<强>:标头强>
如果设置为:first_row
或true
,则CSV文件的初始行将被视为一行标题。如果设置为Array
,则内容将用作标题。如果设置为String
,String
将通过::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