
ruby 初心者の50代のサラリーマンです。
若い人にrubyがいいだろうと言われて挑戦していますが、なかなか分かりません。
どなたか、教えてください。
大きなCSVファイルがあって、
1行目は項目名が入っていて不要です。
2行目以降、
各行2列目にレコード名、
各行8列目に欲しいデータが入っています。
データは29行毎に1レコード分になっています。
レコード名は各行で重複しています。つまり、
試験日,サンプルA,***,・・・・・,観測値1,・・・・・・
試験日,サンプルA,***,・・・・・,観測値2,・・・・・・
試験日,サンプルA,***,・・・・・,観測値29,・・・・・・
試験日,サンプルB,***,・・・・・,観測値1,・・・・・・
試験日,サンプルB,***,・・・・・,観測値2,・・・・・・
試験日,サンプルB,***,・・・・・,観測値29,・・・・・・
というデータです。
それを、
サンプルA,観測値1,観測値2,・・・・・,観測値29
サンプルB,観測値1,観測値2,・・・・・,観測値29
サンプルC,観測値1,観測値2,・・・・・,観測値29
と直してcsvファイルに保存し直したいのです。
どなたか、rubyプログラムの書き方を指南して下さい。
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
----ここまで
永らく、回答もせず、放置して申し訳ありません。
ご回答頂いたスクリプトでは動かず、
結局、会社で分かっている若手に指導をしてもらいました。
次のようなスクリプトで動きました。
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()
No.1
- 回答日時:
RubyでCSVの読み書きするサンプルが、ネット上であふれてるのでそちらをまずマネしてみては。
CSVを読み込むサンプルも、CSV出力するサンプルも、それぞれ3行程度ですので、実行してみて理解するほうが手っ取り早いかと。
もう一つの方法としては、何ができないのかを具体的に質問することを考えてみるとか。
他人に分かりやすく質問を伝えてみることで、自己解決できるケースもありますので。
参考URL:http://www.google.co.jp/search?hl=ja&q=ruby+CSV& …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(再質問)エクセルのマクロボ...
-
秀丸エディタで、同じ記号で囲...
-
CSSのhtmlへの紐付けについ...
-
Ruby 格納
-
Ruby newメソッド
-
1、Rstudioで回帰直線を求める...
-
a=2, b=1のとき”x=(a-b+3)%3”の...
-
Ruby require ライブラリー
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでcsvファイルもシートもあ...
-
ダブルコーテーション付きでCSV...
-
【ExcelVBA】300万件越えCSVか...
-
Excelマクロ 空白セルを無視し...
-
LibreOffice Calcのマクロで、...
-
ファイル名を変数で書きこむfwr...
-
シート内容の文字列を置換してV...
-
EXCEL→CSV保存時のダブルクォー...
-
バッチファイルでcsvファイルに...
-
VBAで文字列を引数とするアドイ...
-
VBScript等で、CSV内の各文字列...
-
pythonによるcsv出力がうまくい...
-
VB.netでShellExecuteがしたい
-
IPアドレスのゼロパディング
-
CSVファイルの比較と結果の取得...
-
パイソン文法で ファイルオープ...
-
fortranでデータの抜き出しをし...
-
pythonのこのエラーがわかりません
-
pythonでリストをCSVに出力する...
-
FileListBoxで出すものを絞り込...
おすすめ情報