【发布时间】:2010-12-13 16:16:06
【问题描述】:
对 Ruby 来说相对较新,我试图弄清楚如何使用 FasterCSV 执行以下操作: 打开一个 CSV 文件,通过其标题选择一列,在该列中仅将所有出现的字符串 x 替换为 y,将新文件写入 STDOUT。 以下代码几乎可以工作:
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”(参见代码中的 cmets)。为什么会这样?以及如何避免?谢谢。
【问题讨论】: