对于Ruby来说相对较新,我试图弄清楚如何使用FasterCSV执行以下操作:打开一个CSV文件,在其列表中选择一个列,在此列中只替换全部字符串x与y的出现,将新文件写出到STDOUT。 下面的代码几乎工作:使用FasterCSV替换一个CSV列中的文本
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”(请参阅代码中的注释)。为什么会发生?以及如何避免它?谢谢。
谢谢Greg。当你编写有用的东西时,直接操纵选择列而不是构建新列,然后尝试用新列替换现有列(请参见下面的代码)。 – Stefan 2010-12-17 08:12:19