Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@Bikeiken-IT

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

More than 1 year has passed since last update.

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

・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
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Bikeiken-IT
IT業界微経験。IT企業に転職すべく、等身大の技術力を発信するアカ。 静岡県に住んでます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?