index page
目次へ戻る   前へ戻る 次へ進む

ファイル操作

このページではファイルからデータを読み込む方法について説明します。

  • ファイルを開いてデータを読み込む
    ファイルを開くには open を使います。
    open ("ファイル名","モードの指定") という具合に書きます。ファイルを扱うときにはいくつかのモードがあって、次のようになっています。モードの指定のところに次のモードを指定します。
  • "r":読込みモード。
  • "w":書込みモード。ファイルが無ければ新規に作成。
  • "a":追加書込みモード。ファイルが無ければ新規に作成。

    データ(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
    
    出力結果は上のようになります。

    データを読み込んで、まとめることまでできるようになりました。後は、読み込んだデータを計算していって、プロットごとに種数や多様度指数を出力させることができれば当初の目標達成です。


    目次へ戻る   前へ戻る 次へ進む