#!/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を並べて出すと大きさが違う # 最大値を固定にするとよいのか?