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」になります (コード内のコメントを参照)。なぜこれが起こるのですか?そして、それを回避する方法は?ありがとう。