Rubyに比較的新しいので、私はFasterCSVを使用して以下を行う方法を見つけようとしています: CSVファイルを開き、ヘッダーで列を選択します。ストリングxがyで出現した場合は、新しいファイルをSTDOUTに書き出します。 次のコードはほとんど動作します:FasterCSVを使用して1つの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"になります(コードのコメントを参照)。なぜこれが起こるのですか?それを避ける方法は?ありがとう。
ありがとうございました。あなたが書いているように、新しい列を作成し、既存の列を新しい列に置き換えるのではなく、選択した列を直接操作することです(下記のコードを参照)。 – Stefan