Ruby on rails 更新打开文件的内容

Ruby on rails 更新打开文件的内容,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,可能重复: 在我的Rails应用程序中,我的助手中有一个方法,通过以下方式打开文件: content = File.open(myfile.txt) 该文件的内容如下所示: my.car , my.seat, my.age; my.son , my.dog, my.chair; ... 我想以将所有“我的”替换为“她”的方式更新此文件的内容 我知道我可以用以下方式将“我的”替换为“她的”: content = File.open('myfile.txt').read content.sp

可能重复:

在我的Rails应用程序中,我的助手中有一个方法,通过以下方式打开文件:

content = File.open(myfile.txt)
该文件的内容如下所示:

my.car , my.seat, my.age;
my.son , my.dog, my.chair;
...
我想将所有“我的”替换为“她”的方式更新此文件的内容

我知道我可以用以下方式将“我的”
替换为“她的”:

content = File.open('myfile.txt').read

content.split(';').each do |line|
      line.gsub!(/my/, "her")
end
但这仅在输出内容行时替换字符串,文件的内容不会更改如何将打开文件的内容更新为:

her.car , her.seat, her.age;
her.son , her.dog, her.chair;
...
--------------更新(我尝试的内容)----------------

我尝试了以下方法,但它不清理旧内容,只添加新内容,我只想拥有新内容,怎么办

File.open('myfile.txt', 'r+') do |myfile|
      content = myfile.read

      content.split(';').each do |line|
         newline = line.gsub!(/my/, "her")
         myfile.write(newline+';')
      end

end

您必须将内容写回文件

现在,您实际上没有文件本身的变量,只针对您正在读取的内容

首先在中读取内容,然后关闭文件,然后打开以进行写入

试试这个:

content = File.open('myfile.txt').read

File.open('myfile.txt', 'w') do |myfile|    
  content.split(';').each do |line|
    line.gsub!(/my/, "her")
    write(line)
  end
end

注意:未经测试,我建议您阅读ruby中的文件。

这与问题完全相同。我投票结束这篇文章:PIt是一个新话题。比旧的更清楚。我觉得保留这个比较好。你应该更新旧的,让它更清楚。不要提出新问题,这很公平。我想我不在乎哪家关门。通常,提问者最好有一个问题的版本,这样你就可以在一个地方得到所有的反馈/回答。您可以随时在适当位置编辑问题以使其更清晰。现在您的其他问题已得到回答,您可以删除此问题。您需要在最后写入之前调用
myfile.seek(0)
,因为文件指针已被提升。是的,很好。或者-关闭文件并重新打开以进行写入。我已经更新了我的答案来匹配这个。