Techioz Blog

テキストファイルに文字列を挿入する方法

概要

文字列を追加したい構成ファイルがあります。そのように:

line1
line2
line3
line4

新しい文字列は追加するのではなく、ファイルの途中に書き込む必要があります。したがって、ファイル内の特定の位置(または文字列)を探しており、それが見つかったら、新しい文字列を挿入します。

file = File.open(path,"r+")
while (!file.eof?)
  line = file.readline
  if (line.downcase.starts_with?("line1"))
    file.write("Some nice little sentence")
  end
end

問題は、Ruby がその位置の行を新しいテキストで上書きするため、結果は次のようになります。

line1
Some nice little sentence
line3
line4

私が望むのは「本物の」挿入です。

line1
Some nice little sentence
line2
line3
line4

どうすればこれを達成できるでしょうか?

解決策

ファイルが小さい場合、最も簡単な方法は次のとおりだと思います。

これが Rails が舞台裏で行う方法です。

または、次のように 1 行ずつコピーし、元のファイルを mv で上書きすることもできます。

require 'fileutils'

tempfile=File.open("file.tmp", 'w')
f=File.new("file.txt")
f.each do |line|
  tempfile<<line
  if line.downcase=~/^line2/
    tempfile << "Some nice little sentence\n"
  end
end
f.close
tempfile.close

FileUtils.mv("file.tmp", "file.txt")