Rubyでファイルの先頭や後ろに追記する方法

Ruby

Rubyでプログラムを書くとき、しっかり運営していくものであればデータベースを使ったほうがいいですが、簡易的なシステムを組んだり一度組んだら捨ててしまうような場合のときにデータベースを使うのは少し面倒なときがあります。そんなときにファイルを簡易的なデータベースとして使うこともありますが、今回はそのようなときに使えるファイルの先頭や後ろに追記する方法を学びます。

ファイルの先頭に追記する方法

ファイルの先頭に書き込む場合は一度ファイルの中身を取り出して配列化し、その配列に対してunshiftメソッドで追加したあとにファイルに上書きすることで先頭に書き込むことを実現します。Fileのドキュメントを見てみるとファイルをオープンするときにr+にすれば読み書き位置は先頭になりますが、これだとただ上書きをしてしまうだけなのでこのような方法を取っています。

# 1行目に書き込みを行う
def write_top_of_file(data, filename)
  lines = []
  File.foreach(filename) do |line|
    lines << line.chomp
  end
  lines.unshift(data)
  lines.flatten!
  File.open(filename, "r+") do |f|
    lines.each do |url|
      f.puts url
    end
  end
end

data = ["a", "b", "c"]
filename = "./test.txt"
write_top_of_file(data, filename)
# 上の関数を実行するたびにファイルの先頭に追記される

ファイルの最終行に書き込みを行う

ファイルの最終行に書き込む場合は、ファイルオープン時にモードをa+にするとちょうどよいです。例えば以下のように行います。

# 最終行から書き込みを行う
def write_bottom_of_file(data, filename)
  File.open(filename, "a+") do |f|
    data.each do |d|
      f.puts d
    end
  end
end

data = ["c", "d", "e"]
filename = "./test.txt"
write_bottom_of_file(data, filename)
# 上の関数を実行するたびにファイルの後ろに追記される

参考リンク