Rubyで読み込んだCSVの行番号の列を追加し、指定列以外削除したい

投稿者: Anonymous

rubyの初学者で、csv機能について、勉強しており不明点がありどなたかご教授頂ければと存じます

質問
読み込んだcsvへ

1:列を追加
2:行番号を取得し、1で取得した列へ値を追加
3:コード 番地列を削除したいのですが、

リファレンスのdeleteの部分を理解する事ができず、どなたかご教授頂ければと存じます。

そもそもやりたい事
csvを読み込み、加工し、別ファイルで加工したcsvを保存

求めているcsvの中身

行番号,都道府県,住所
1,北海道,札幌市中央区
2,北海道,札幌市中央区

以下読み込みcsvとコード

sample.csv

コード,都道府県,住所,番地
1101,北海道,札幌市中央区,旭ケ丘
1101,北海道,札幌市中央区,大通東

コード

require 'csv'

読み込みファイル名
data_list = CSV.read('sample.csv')

ここに処理を記載?

生成ファイル名
file_path = 'index_db.csv'

CSV.open(file_path, 'wb') do |csv|
  data_list.each do |rec|
    csv << rec
  end
end

※前提として、ruby(バージョン2)のみの対応を考えています。

参照リンク

解決

CSV.table を使う例など。

require 'csv'

tbl = CSV.table('sample.csv',
                header_converters: lambda {|h|
                  h == 'コード' ? '行番号' : h
                })
tbl.each_with_index{|row, i| row['行番号'] = i + 1}
tbl.delete('番地')

file_path = 'index_db.csv'
File.open(file_path, 'wb'){|f| f.puts(tbl.to_csv)}
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *