Rubyでファイルの書き込み・読み込みを行う方法

今回は Ruby のファイルの読み込みと書き込み処理の方法について説明します。Ruby でファイルを扱う場合には File クラスを使用します。

ファイルを開く

File を開くためには open メソッドを使用します。

File.open(ファイル名, モード)

第1引数にファイル名を指定します。第2引数にはファイルを開くときのモードを指定します。読み込みモードの一覧は以下の通りです。

r読み込みモード
r+読み込み + 書き込みモード
w新規作成・書き込みモード
w+新規作成・読み込み + 書き込みモード
a追記書き込みモード
a+読み込み + 追記書き込みモード 

ファイルの書き込み

以下はファイルに文字列を書き込むサンプルプログラムです。

# sample1.rb
File.open("sample1.txt", "w") do |f| 
  f.puts("Hello, World!")
end

プログラムを実行後、ファイルを確認してみます。

$ cat sample1.txt
Hello, World!

まず、open メソッドでファイルを開きます。open の第1引数に sample.txt を指定し、第2引数には書き込みモードを示す "w" を指定します。このモードのとき、ファイルが存在しない場合は新規作成され、存在する場合は上書きされます。

そして、f.puts("Hello, World!") でファイルに書き込んでいます。

ファイルの末尾に書き込む

ファイルに追記する場合は open メソッドの第2引数に "a" モードで指定します。

#sample1.rb
File.open("sample1.txt", "a") do |f|
  f.puts("Hello, World2!")
end

文字列配列をファイルに書き込む

配列に格納されている文字列を1行ずつ書き込むサンプルプログラムです。

# sample2.rb
a = ["line1", "line2", "line3"]
File.open("sample2.txt", "w") do |f|
  a.each { |s| f.puts(s) }
end

プログラムを実行後、ファイルを確認してみます。

$ cat sample2.txt
line1
line2
line3

上の例と同様にファイルを書き込みモードで開きます。 a.each の部分は配列 a から1つずつ要素を取り出し、仮にそれを s と名付けています。そして、 取り出した文字列を f.puts(s) でファイルに書き込んでいきます。

each 文についてはこちらを参考にしてください。

ファイルを読み込む

今回は以下のファイル(sample2.txt)を読み込んでみます。

Lorem ipsum dolor sit amet,
ad pro aliquando reprimique,
et sit eripuit corrumpit.

以下はファイルを読み込むサンプルプログラムです。

#sample3.rb
File.open("sample2.txt", "r") do |f|
  puts f.read
end

実行結果

Lorem ipsum dolor sit amet,
ad pro aliquando reprimique,
et sit eripuit corrumpit.

ファイルを読み込むときは  open の第2引数に "r" を指定します。そして、 read メソッドを使用してファイル全体を読み込んでいます。

1行ずつファイルを読み込む

以下は1行ずつファイルを読み込み、行番号をつけて表示するサンプルプログラムです。

# sample3.rb
linenum = 1
File.open("sample2.txt", "r") do |f|
  a.each_line { |line|
    puts(linenum + ": " + line)
    linenum++
  }
end

実行結果

1: Lorem ipsum dolor sit amet,
2: ad pro aliquando reprimique,
3: et sit eripuit corrumpit.

読み込みモードで開き、読み込んだファイルから each_line で1行ずつ文字列を読み込み処理を行っています。


イベント

2017/12/05(火)
Design Thinking Square