LoginSignup
0
0

More than 3 years have passed since last update.

初級:Rubyでファイルの読み込みクラスを作ろう。

Last updated at Posted at 2020-02-03

ファイル操作の基礎中の基礎、ファイルの読み込みクラスを作り読み込むだけの処理となります。

・Rubyの参照の基礎

今回はsub.rbに定義したFilereadクラスをmain.rbで使用するため、main.rbの方でsub.rbをrequireで参照します。main.rbとsub.rbは同一ディレクトリに置いてあります。

main.rb
require './sub.rb'
#この下に、定義したFile処理クラスのインスタンスを生成します。

sub.rb
#ここにFile処理のクラスを定義します。

main.rbのrequireのディレクトリはカレントディレクトリを示していますが、'./'を記述することによりカレントディレクトリを明示的なものとしています。この'./'が無い場合はファイルが正しく読み込まれず、次のようなエラーが表示されます。
require': cannot load such file -- sub.rb (LoadError)

・sub.rbにファイル読み込みクラスを定義する
ファイルの読み込みには、ファイルアクセスのためのFileクラスのopenメソッドとreadメソッド、closeメソッドを用います。
基本的な記述はこのようになります。

file = File.open("ファイルの名前", "r")
puts file.read
file.close

Fileオブジェクトに対してopenメソッドを使います。第一引数にファイル名、第二引数はファイルの読み込みを意味する"r"(readの意味)を与えます。この処理の戻り値をfile変数に格納します。
putsメソッドを用いて、先ほどの処理に対してreadメソッドで処理結果を出力します。
最後に、openメソッドに対してcloseメソッドを用いて、上記の処理を終了させます。

次に、上記の処理をFilereadクラスとして定義します。
initializeメソッドについてです。
main.rbでFilereadクラスのインスタンスがnewメソッドにより生成された際、
一番最初に呼び出されるのがこのメソッドです。
newメソッドに引数が与えられると、このinitializeメソッドに引き渡され、
クラス内で変数として使えるように初期化されます。
したがって、この初期化された変数@filenameはFilereadクラスのスコープ内で有効となります。
newメソッドより引き渡される変数finenameは読み込み処理のためのファイルの名前となります。

次に、readfileメソッドについてです。
initializeメソッドにより初期化された変数@filenameはopenメソッドの引数として用いられています。
readfileメソッドがFilereadクラスのスコープ内に存在するため、この変数を使えます。

sub.rb
class Fileread
    #initializeメソッドで変数を初期化
    def initialize(filename)
        @filename = filename
    end
    #ファイルの読み出し処理
    def readfile
        file = File.open(@filename, "r")
            puts file.read
        file.close
    end
end

最後にmain.rbファイルでFilereadクラスのインスタンスを生成します。

main.rb
require './sub.rb'

#ファイルの読み込み
file = Fileread.new("./test.txt")
file.readfile

sub.rbで定義されたFilereadクラスにnewメソッドを用いて、指定されたファイルを読み込むためのインスタンスを生成します。このファイルの指定の仕方はnewメソッドの引数に読み込みたいファイルの名前と場所を与えることで指定できます。生成されたインスタンスに対して、Filereadクラス内で定義されたreadfileメソッドを用いて、ファイルを読み込むための処理が実行されます。

以上となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0