今回は Ruby のファイルの読み込みと書き込み処理の方法について説明します。Ruby でファイルを扱う場合には File クラスを使用します。
ファイルを開く
File を開くためには open メソッドを使用します。
1 |
File.open(ファイル名, モード) |
第1引数にファイル名を指定します。第2引数にはファイルを開くときのモードを指定します。読み込みモードの一覧は以下の通りです。
r | 読み込みモード |
r+ | 読み込み + 書き込みモード |
w | 新規作成・書き込みモード |
w+ | 新規作成・読み込み + 書き込みモード |
a | 追記書き込みモード |
a+ | 読み込み + 追記書き込みモード |
ファイルの書き込み
以下はファイルに文字列を書き込むサンプルプログラムです。
1 2 3 4 |
# sample1.rb File.open("sample1.txt", "w") do |f| f.puts("Hello, World!") end |
プログラムを実行後、ファイルを確認してみます。
1 2 |
$ cat sample1.txt Hello, World! |
まず、open メソッドでファイルを開きます。open の第1引数に sample.txt を指定し、第2引数には書き込みモードを示す "w" を指定します。このモードのとき、ファイルが存在しない場合は新規作成され、存在する場合は上書きされます。
そして、f.puts("Hello, World!") でファイルに書き込んでいます。
ファイルの末尾に書き込む
ファイルに追記する場合は open メソッドの第2引数に "a" モードで指定します。
1 2 3 4 |
#sample1.rb File.open("sample1.txt", "a") do |f| f.puts("Hello, World2!") end |
文字列配列をファイルに書き込む
配列に格納されている文字列を1行ずつ書き込むサンプルプログラムです。
1 2 3 4 5 |
# sample2.rb a = ["line1", "line2", "line3"] File.open("sample2.txt", "w") do |f| a.each { |s| f.puts(s) } end |
プログラムを実行後、ファイルを確認してみます。
1 2 3 4 |
$ cat sample2.txt line1 line2 line3 |
上の例と同様にファイルを書き込みモードで開きます。 a.each の部分は配列 a から1つずつ要素を取り出し、仮にそれを s と名付けています。そして、 取り出した文字列を f.puts(s) でファイルに書き込んでいきます。
each 文についてはこちらを参考にしてください。
ファイルを読み込む
今回は以下のファイル(sample2.txt)を読み込んでみます。
1 2 3 |
Lorem ipsum dolor sit amet, ad pro aliquando reprimique, et sit eripuit corrumpit. |
以下はファイルを読み込むサンプルプログラムです。
1 2 3 4 |
#sample3.rb File.open("sample2.txt", "r") do |f| puts f.read end |
実行結果
1 2 3 |
Lorem ipsum dolor sit amet, ad pro aliquando reprimique, et sit eripuit corrumpit. |
ファイルを読み込むときは open の第2引数に "r" を指定します。そして、 read メソッドを使用してファイル全体を読み込んでいます。
1行ずつファイルを読み込む
以下は1行ずつファイルを読み込み、行番号をつけて表示するサンプルプログラムです。
1 2 3 4 5 6 7 8 |
# sample3.rb linenum = 1 File.open("sample2.txt", "r") do |f| a.each_line { |line| puts(linenum + ": " + line) linenum++ } end |
実行結果
1 2 3 |
1: Lorem ipsum dolor sit amet, 2: ad pro aliquando reprimique, 3: et sit eripuit corrumpit. |
読み込みモードで開き、読み込んだファイルから each_line で1行ずつ文字列を読み込み処理を行っています。