Newer
Older
Ruby / raingraph.rb
#!/usr/bin/env ruby
require 'csv'
rainfall_data =CSV.read(ARGV[0], headers: true)
# プログラムを起動時 ruby rainmax.rb aaa.csv とするとARGV[0]にaaa.csvが入る

max_rainfall = 0.0
max_hour = 0
rainfall_data.each do |row|
  if row['rainfall'].to_f > max_rainfall
    max_rainfall = row['rainfall'].to_f
    max_hour = row['hour'].to_i
  end
end
puts "最も降水量が多い時間帯は #{max_hour}時で、降水量は #{max_rainfall} mm です。"
## ASCII ART グラフを作る!
# 画面は大抵80桁なので最大幅が80以下になるように倍率を決める。
# 80 - その他の文字の幅 = 60にする
ratio = 60/max_rainfall
p ratio
rainfall_data.each do |row|
  rainfall = row['rainfall']
  dots = rainfall.to_f*ratio
  #p dots
  printf("%2d時%5smm: %s\n", row['hour'], rainfall, "#"*dots)
  #             XXmmのところは数値化せず文字列のまま出す(%5sで5桁に揃える)
  # "文字列"に掛け算(*)を使うとその回数だけ繰り返す → "#"*個数
end
# 課題
# 最大幅の倍率を毎回変えているので別のCSVを並べて出すと大きさが違う
# 最大値を固定にするとよいのか?