ruby-on-rails - 如何将字符串插入文本文件

标签 ruby-on-rails ruby

我有一个配置文件,我想在其中添加一个字符串,例如像那样:

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 does it在幕后。

或者你可以逐行复制然后用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")

关于ruby-on-rails - 如何将字符串插入文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2139058/

相关文章:

ruby - Program Files 下的文件具有人格 split

ruby-on-rails - rails : Could not locate Gemfile

ruby-on-rails - 渲染包含 Float::NAN 对象的哈希时,Rails 返回无效的 JSON

ruby-on-rails - Rails 4.2 Active Job Resque Enqueue 未定义方法问题

ruby-on-rails - ruby rails : Getting undefined method using array with name in my select tag

ruby-on-rails - 在 Rails View 中检查 nil 字符串

ruby-on-rails - 如何为 Rails map 配置文件配置 Google Maps?

ruby - 继续,未定义 callcc 方法

ruby-on-rails - 在 Rails 之外使用 ActiveRecord::Database::Tasks 时,我需要配置什么以避免开发数据库未配置错误?

ruby-on-rails - 如何在 rake 上设置默认主机?