• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CSVファイルの特定列を新たなCSVファイルに変換)

特定列のCSVファイルを変換する方法

このQ&Aのポイント
  • ruby初心者の50代のサラリーマンが、特定のCSVファイルの列を新たなCSVファイルに変換する方法を教えてください。
  • 大きなCSVファイルには項目名を除いたデータが含まれており、各行の2列目にレコード名、8列目に欲しいデータが入っています。
  • CSVファイルのデータを整理し、特定の列をまとめて新しいファイルに保存するためのrubyプログラムの書き方を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • siffon9
  • ベストアンサー率64% (136/211)
回答No.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 ----ここまで

kamiyasiro
質問者

お礼

永らく、回答もせず、放置して申し訳ありません。 ご回答頂いたスクリプトでは動かず、 結局、会社で分かっている若手に指導をしてもらいました。 次のようなスクリプトで動きました。 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()

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

RubyでCSVの読み書きするサンプルが、ネット上であふれてるのでそちらをまずマネしてみては。 CSVを読み込むサンプルも、CSV出力するサンプルも、それぞれ3行程度ですので、実行してみて理解するほうが手っ取り早いかと。 もう一つの方法としては、何ができないのかを具体的に質問することを考えてみるとか。 他人に分かりやすく質問を伝えてみることで、自己解決できるケースもありますので。

参考URL:
http://www.google.co.jp/search?hl=ja&q=ruby+CSV&lr=lang_ja