各観測点の月降水量と年降水量を求める
先週作ったget_month_annual.rbを立ち上げ、続きをやりましょう
get_month_annual.rbの内容
#各観測点のつき降水量と年降水量を求める
dir = "EachStation/"
Dir.foreach(dir) do |file|
#Dir.foreach(dir)――dirのディレクトリの要素に対して繰り返す
#file = "50136.prc"
if /prc$/ =~ file
puts file
#出力ディレクトリ作成
out_dir = "MonthlyAnnual"
Dir.mkdir(out_dir) unless File.exist?(out_dir)
#出力ファイルのオーペン
station_number = file[0..-5]
#[0..-5] は0ケタ目から-5ケタ目までを選ぶ 方法②――[0,5]0桁から5つの桁まで 方法③――[0..4]0から4ケタ目まで
#注意:前から数えると0ケタ目、1ケタ目… 後ろから数えると-1ケタ目、-2ケタ目
out_file = out_dir + "/" + station_number + ".mon"
out = open(out_file,"w")
#ヘッダの出力
out.printf "%s", station_number
12.times{|i| out.printf "%7d", i+1} #{}ブロック timesは繰り返す回数を表す
out.printf " annual\n" #「\n」改行マック
#初期化
monthly = annual = 0.0; month_before = 0; day = 0
#各観測点の降水量ファイルをオーペンし、月降水量・年降水量を求めます
open(dir + file).each do |line|
v = line.chop.split
year = v[1]; month = v[2].to_i; prec = v[4].to_f #「to_i」は整数;「to_f」は分数
unless month == month_before #「==」は等号
if day > 0
out.printf "%5s", year if month_before == 1
out.printf "%7.1f", monthly
annual += monthly
monthly = 0.0
if month_before == 12
out.printf "%9.1f\n", annual
annual = 0.0
end
end
end
monthly += prec; month_before = month; day +=1
end
out.printf "%7.1f", monthly
out.printf "%9.1f\n", annual
out.close
end
end
新しくできたフォルダMonthlyAnnualの中、“各station番号.mon”というファイルがたくさんできました。
その中身は以下のようになります
今回はここまでになります。
お疲れ様でした。
最終更新:2022年05月06日 16:43