Ruby実用例 〜超簡単なデータ処理〜 のバックアップ差分(No.7)


プログラムは,人がやるには苦痛を伴う単調な作業を正確に素早く行ってくれます.機械的に測定した実験データなどは,決まった処理を繰り返し行わなければならないことがあります.このような処理が,プログラムは大変得意です.
 
 ここではRubyプログラムの便利さの一端を感じるため,「カンマで区切られた数値の,各行の平均値を取って出力する」という極簡単な処理を行ってみます.
 
 * プログラムの名前 [#i293bd44]
 
 名前は結構重要です.できれば何をするか分かる名前を付けましょう.ここでつくるプログラムは,各行の平均値をとるので「row_average.rb」という名前にしておきます.プログラムはコマンドラインで
 
  row_average.rb infile
 
 とすれば実行できるようにします.「infile」というのは,入力データを含んだテキストファイル名を仮に表しています.実行時,実際のファイル名に置き換えてください.
 
 * データの流れ [#z90239dc]
 
 データ処理を行うので,まずどんなデータを入力して,どんなデータを出力するかをハッキリさせておきます.以下のような入出力を想定します.
 
 ** 入力データ [#w9fbe378]
 
  256.3,258.6,256.9
  122,222,222,223
  256.3 ,258.6,256.9
  122,222, 222,223
  ...
 
 何かの測定値がカンマで区切られています.区切りの量はいつも同じとは限りません.
 何かの測定値がカンマで区切られています.区切りの量はいつも同じとは限りません.しかも,カンマの前後に半角スペースがある場合もあります.
 
 ** 出力データ [#p7e3c99c]
 
  1, 254
  2, 343
  ...
 
 行番号と,行の平均値をカンマで区切って出力します.
 
 * ステップ1 [#i4ad32df]
 * コーディング [#p0f04cd2]
 
 いくつかのステップに分けてプログラムを完成させて行きます.
 
 ** ステップ1 [#i4ad32df]
 
 まず,入力ファイルを各行ごとに取得するようにします.Rubyではgetsから標準入力,または第一引数の内容を得ることができます.
 
  #!/usr/bin/env ruby
  
  while line = gets
    p line
  end
 
 ** ステップ2 [#v8384dda]
 
 カンマで区切る,という動作を加えます.STRING.split()メソッドを使います.
 
  #!/usr/bin/env ruby
  
  while line = gets
    p line.split(",")
  end
 
 ** ステップ3 [#q1ba9feb]
 
 余分な空白も取り除くようにします.
 
  #!/usr/bin/env ruby
  
  while line = gets
    p line.gsub(/\s/, "").split(",")
  end
 
 ** ステップ4 [#ya2fbf1d]
 
 取り出した値
 
  #!/usr/bin/env ruby
  
  while line = gets
    line.gsub(/\s/, "").split(",").each{|x|
      p x
    }
  end
 
 
 ** ステップ5 [#uc3f538c]
 
  #!/usr/bin/env ruby
  #  puts sum/i
  =end
 
 while line = gets
   line.chomp!
   sum = 0.0; i = 0
   line.gsub(/\s/, "").split(",").each{|x|
     sum += x.to_f
     i += 1
   }
   printf("%.2f\r\n", sum/i)
 end
 
Valid XHTML 1.1! home >
トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.3.29HTML convert time to 0.004 sec.