对 Ruby 来说相对较新,我试图弄清楚如何使用 FasterCSV 执行以下操作:打开一个 CSV 文件,按标题选择一列,在此列中仅将所有出现的字符串 x 替换为 y,写出新文件到标准输出。以下代码几乎可以工作:
filename = ARGV[0]
csv = FCSV.read(filename, :headers => true, :header_converters => :symbol, :return_headers => true, :encoding => 'u')
mycol = csv[:mycol]
# construct a mycol_new by iterating over mycol and doing some string replacement
puts csv[:mycol][0] # produces "MyCol" as expected
puts mycol_new[0] # produces "MyCol" as expected
csv[:mycol] = mycol_new
puts csv[:mycol][0] # produces "mycol" while "MyCol" is expected
csv.each do |r|
puts r.to_csv(:force_quotes => true)
end
唯一的问题是有一个我不期望的标题转换。如果所选列的标题在替换 csv 表中的列之前是“MyCol”,那么之后是“mycol”(参见代码中的注释)。为什么会这样?以及如何避免?谢谢。