各観測点の月降水量と年降水量を求める

先週作った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
添付ファイル