データ(data.txt)は以下のようなものを用意します。いわゆるカンマ区切りのテキストファイルです。データファイルはプログラムと同じフォルダに置いてください。WinRubyではWinRubyのあるフォルダ(デフォルトでは c:\ruby\bin だと思います。)に置いてください。
MT001,species1,0.5 MT001,species2,0.4 MT001,species3,0.6 MT002,species3,0.3 MT002,species4,0.2 MT003,species1,0.1 MT003,species2,0.9 MT003,species3,0.6
class List #クラスの定義。内容はインスタンスのページで復習してください。 attr_accessor :plot, :species, :abundance def initialize(plot="new_plot", species="new_species", abundance=0) @plot = plot @species = species @abundance = abundance end end list_aray = Array.new #配列を作っておく。後でデータを入れる。 file_in = open ("data.txt","r") #読込みモードでファイルを開く while line = file_in.gets #開いたファイルから1行読み込んで、lineに代入 line.chomp! #改行文字を除去 plot, species, abundance = line.split(/,/) #「,」で分割 list = List.new(plot,species,abundance) #インスタンス作成 list_aray.push(list) #インスタンスを配列に追加 end file_in.close #開いたファイルを閉じる list_aray.each{ |aray| print aray.plot,"\t",aray.species,"\t",aray.abundance,"\n" }
まずはじめに open によりファイルを開いています。ここでは、ファイルを開いて、その参照先を file_in というインスタンスに代入しています。次に、その参照先のインスタンスに対して gets というメソッドで、開いているファイルの1行ずつを line という変数に代入していきます。
最後に、close により開いたファイルを閉じます。閉じなくても、最終的にプログラムを終わった時点で Ruby が閉じてくれます。でも、閉じる習慣をつけておいたほうが良いようです。いくつもファイルを開いたままにすると例外(エラー)になることもあるようです。
while ・・・・ end は繰り返しをさせています。while の後ろの値が真の間は繰り返しをして、偽になると繰り返しを止めます。ここの場合は line の値が真のときは繰り返しを続け、偽になると終わります。偽の場合とは入れるデータがなくなったとき、つまり、data.txt を読み込んでいって、全て読みきったときです。
chomp! メソッドでは line の改行文字を取り除きます。ファイルを1行ずつ読み込んだときには、行の最後に改行文字がついてきます。これを除去するためです。似たようなメソッドで chomp があります。こちらも改行文字を取り除くと言うのは同じです。しかし、 line 自体に変化は無く、 line2 = line.chomp として取り除いたものを別のものに代入しなければなりません。つまり、line.chomp! は line = line.chomp と同じ意味になります。
split メソッドは文字列の分割をします。 ( ) の中の / / で囲まれた文字で文字列を分割します。その後、分割した文字列を1番目のものを plot に、2番目のものを species に、3番目のものを abundance に代入しています。
MT001 species1 0.5 MT001 species2 0.4 MT001 species3 0.6 MT002 species3 0.3 MT002 species4 0.2 MT003 species1 0.1 MT003 species2 0.9 MT003 species3 0.6
データを読み込んで、まとめることまでできるようになりました。後は、読み込んだデータを計算していって、プロットごとに種数や多様度指数を出力させることができれば当初の目標達成です。