- ベストアンサー
特定列のCSVファイルを変換する方法
- ruby初心者の50代のサラリーマンが、特定のCSVファイルの列を新たなCSVファイルに変換する方法を教えてください。
- 大きなCSVファイルには項目名を除いたデータが含まれており、各行の2列目にレコード名、8列目に欲しいデータが入っています。
- CSVファイルのデータを整理し、特定の列をまとめて新しいファイルに保存するためのrubyプログラムの書き方を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 私も業務で似たようなプログラムを書いてデータ処理しています。 Rubyを覚えるとお手軽に処理できて便利ですよ! こんな感じで如何でしょうか? data.csvを読み込んで、output.csvに出力します。 CSVクラスは使ったことないので使用していません。 プログラムがどの様な動作をしているかは、ご自身で確認してみて下さいね。 ----ここから data = Hash.new{|h,k| h[k]=[]} # CSVファイル読み込み first_line = true File.foreach('data.csv') do |line| if first_line # 1行目読み飛ばし first_line = false next else ary = line.chomp.split(",") # CSVなので区切りは半角のカンマでは? data[ary[1]].push(ary[7]) end end # データ出力 File.open('output.csv',"w") do |fo| data.each_key do |key| fo.puts "#{key},#{data[key].join(',')}" end end ----ここまで
その他の回答 (1)
- osamuy
- ベストアンサー率42% (1231/2878)
RubyでCSVの読み書きするサンプルが、ネット上であふれてるのでそちらをまずマネしてみては。 CSVを読み込むサンプルも、CSV出力するサンプルも、それぞれ3行程度ですので、実行してみて理解するほうが手っ取り早いかと。 もう一つの方法としては、何ができないのかを具体的に質問することを考えてみるとか。 他人に分かりやすく質問を伝えてみることで、自己解決できるケースもありますので。
お礼
永らく、回答もせず、放置して申し訳ありません。 ご回答頂いたスクリプトでは動かず、 結局、会社で分かっている若手に指導をしてもらいました。 次のようなスクリプトで動きました。 require "CSV" reader=CSV.open("data.csv","r") writer=CSV.open("output.csv","w") header=reader.take(1)[0] f=Array.new p header # 1行目読み飛ばし i=0 reader.each do |row| f[0]=row[1] f[i]=row[7] i=i+1 if i==29 then writer <<f i=0 end end writer.close()