0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby のcsvについてお勉強(基本が理解できてませんがやってます)

Posted at

作っている最中のアプリがあるんだけど、どうもにつまったので、学んだ内容を包み隠さずアウトプットとして残すことにします。

今現在、行き詰まっているのはRUBY上でcsvを扱うことについて。
ヘッダーが日本語のcsvを取り込んでグラフ化したいっていうのがゴールなんだけど、これだけの事が中々理解出来ずにいます。

下記サイトを参考に色々といじってみたのですが、基本的なブロック変数(引数?)が理解できてない状態。

###使っているcsv

測定器,シリアル番号,タイムスタンプ測定器,記録タイプ,過去のグルコース値 mg/dL,血糖値をスキャンする mg/dL,超速効型インスリン(数値入力なし),超速効型インスリン値(単位),食事(数値入力なし),炭水化物(グラム),炭水化物(回分),持効型インスリン(数値入力なし),持効型インスリン値(単位),メモ,ストリップグルコース mg/dL,ケトン mmol/L,食事時インスリン(単位),補正インスリン(単位),使用者による変更インスリン(単位)
FreeStyle リブレ,JCGY177-T2765,2020-05-16 2:37,0,194,,,,,,,,,,,,,,
FreeStyle リブレ,JCGY177-T2765,2020-05-16 2:52,0,204,,,,,,,,,,,,,,
FreeStyle リブレ,JCGY177-T2765,2020-05-16 3:07,0,209,,,,,,,,,,,,,,
FreeStyle リブレ,JCGY177-T2765,2020-05-16 3:22,0,211,,,,,,,,,,,,,,

この中で扱いたいのが、日時とグルコース値だけなので、
参考サイトを見つつこんな感じで取り出してみた。

###参考サイトの実験

require 'csv'

HEADER_TO_SYM_MAP = {
  'タイムスタンプ測定器' => :id,
  '過去のグルコース値 mg/dL' => :guru,
}

header_converter = lambda { |h| HEADER_TO_SYM_MAP[h] }
csv = CSV.read('test/RUBY/csv.csv', headers: :first_row, header_converters: header_converter, converters: :integer, skip_blanks: true)

csv.each do |row|
  HEADER_TO_SYM_MAP.values.each { |k| puts "#{k} : #{row[k]}" }
end

###結果

RUBY % ruby test.rb
id : 2020-05-16 2:37
guru : 194
id : 2020-05-16 2:52
guru : 204
id : 2020-05-16 3:07
guru : 209
id : 2020-05-16 3:22
guru : 211

この中で、グラフ化にする際に、どの変数を扱えばいいかわからないのと、
header_converter = lambda { |h| HEADER_TO_SYM_MAP[h] }
のうち|h|をなんで使っているかがわからないのです・・・。

そんな訳で、基本のキかもしれないけど|h|とか|k|の扱いを理解するためにブロック変数とか引数とか調べて、わかり次第追記します。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?