Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

kanazawa.rb meetup #59 に参加しました #kzrb

kzrb.doorkeeper.jp

いつもの感じでもくもくしていました。いつもと違うのはメインのメンバーが揃って不在なことで、 @cotton_desu さんが準備や司会業や会計業などもろもろ頑張っていました。ありがとうございます!

今回は特定用途のCSVファイルを取り込んでそれをいい感じにフィルタリングするというようなスクリプトを書いていました。Rubyで。

気付き

CSV converterという仕組みがあり、ファイルを読み込んでCSVフォーマットの文字列をパースするときに特定のルールにマッチしていれば得られた値をNumericやDateの型にしてくれるという便利なものです。ドキュメント見ていて今回初めて気付きました。くわしい記事を見つけたので参照してみてください。

tech-kazuhisa.hatenablog.com

ドキュメントはこちらです。

class CSV (Ruby 2.4.0)

自分のケースではカンマを含む金額のフィールドがありそれを数値として扱いたかったため自作converterを作って処理しました。

require 'csv'

filename = 'foo.csv'
converter = -> (f) { 
  begin
    e = f.encode(CSV::ConverterEncoding)
    e =~ /[\d,]+/ ? Integer(e.gsub(/,/, '')) : f
  rescue
    f
  end
}

CSV.foreach(filename, converters: [converter]) do |row|
  # ...
end

銀行口座の明細CSVファイルを取り込んで項目などでフィルター掛けて畳み込むみたいなことが一応できました。(CSVファイル読み込みさえすればあとはRuby組み込みのメソッドを使ってるだけですが…w) 進捗出せたので良かったです。

# 電気料金の引き落とし額の合計値を求める例
bank_account.parsed_data.select {|d| d.summary =~ /電気/ }.reduce(0) {|sum, d| sum + d.payment }
=> 7291

懇親会

いわゆる昔ながらのビアガーデンという雰囲気。この日は相当暑い日でしたのでビールが進みました😆 食べ放題だったのですが、最初のバッチ(3枚目の写真)で割と満腹になったのは少々誤算ではありましたねw

次回はkzrb 5周年。