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で質問しましょう!
似たような質問が見つかりました
- 統計学 3シグマ管理 10 2022/09/02 07:29
- 物理学 サルでも分かるように「ベルの不等式」を説明できますか。 8 2023/02/20 14:29
- 物理学 二重スリット実験について 9 2022/06/26 12:40
- 宇宙科学・天文学・天気 ブラックホールに自由落下した場合の距離を教えてください。 3 2023/01/11 17:40
- その他(教育・科学・学問) 以下、二重スリット実験で小学生にもわかる説明をお願いします。(必要な前提知識がないので何かの例え話で 9 2023/01/03 15:57
- 政治学 H3ロケットについて思う 2 2023/06/18 09:55
- 物理学 rlc直列回路の波形を観測する時、放電時は写真のような波形が観測されると思うのですが、なぜこのような 3 2022/09/23 23:49
- 宇宙科学・天文学・天気 1977年に打ち上げられたボイジャ―1号と2号では、今稼働している磁気計とプラズマ化学装置はどのよう 1 2022/12/26 15:18
- 物理学 rc直列回路の波形を観測する時、充電時の波形と放電時の波形は写真の通り(上が充電時、下が放電時)観測 1 2022/09/23 23:43
- 地震・津波 1週間で震度3以上が8回だそうです。注意したほうがいいですぴょん? 1 2022/05/08 19:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】300万件越えCSVか...
-
Excelマクロ 空白セルを無視し...
-
VBAでcsvファイルもシートもあ...
-
Pythonのコードエラーについて...
-
fortranでデータの抜き出しをし...
-
VB.netでShellExecuteがしたい
-
ダブルコーテーション付きでCSV...
-
複数のファイルをまたぐエクセ...
-
ブラウザ上でcsvファイルの編集
-
【C#】 csvファイルをバイナリ...
-
EXCEL→CSV保存時のダブルクォー...
-
rubyを用いたCSVファイルの分割...
-
エクセルの任意のシートをcs...
-
CSVファイルの特定列を新たなCS...
-
pythonでリストをCSVに出力する...
-
バッチ処理 特定の文字以降を...
-
INPUTタグ disabledの文字色を...
-
VBA テキストボックスを選択状...
-
C# ファイルを読み込みlistvie...
-
分数の計算のプログラミングです。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【ExcelVBA】300万件越えCSVか...
-
Excelマクロ 空白セルを無視し...
-
ダブルコーテーション付きでCSV...
-
VBAでcsvファイルもシートもあ...
-
ファイル名を変数で書きこむfwr...
-
VB.netでShellExecuteがしたい
-
EXCEL→CSV保存時のダブルクォー...
-
複数のファイルをまたぐエクセ...
-
pythonでリストをCSVに出力する...
-
【C#】 csvファイルをバイナリ...
-
VBAで複数のCSVからレコードセ...
-
rubyを用いたCSVファイルの分割...
-
CSVデータの文字列置換
-
エクセルVBA Application.GetSa...
-
パイソン文法で ファイルオープ...
-
Rubyを使用してcsvファイルを処...
-
vbaマクロについて 次のような...
-
CSVファイルの比較と結果の取得...
-
fortranでデータの抜き出しをし...
-
コマンドプロンプトでファイル...
おすすめ情報