【问题标题】:Newbie: text replacement in my case新手:在我的情况下文本替换
【发布时间】:2011-11-01 10:33:07
【问题描述】:

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

content = File.open(myfile.txt)

文件的内容如下:

my.car , my.seat, my.age;
my.son , my.dog, my.chair;
...

所以,我用“;拆分内容,如下所示:

content.split(';').each do |line|
      #Here, I want to replace the text from "my" to "her" on each line
end

如何将内容中每一行的“my”替换为“her”?

将内容更新为:

her.car , her.seat, her.age;
her.son , her.dog, her.chair;
...

-------------- 更新 ----- ----------------

我想更新打开文件的内容,而不只是在从 ruby​​ 代码中读取内容时替换字符串。

【问题讨论】:

  • 这是一个非常基本的问题,在互联网上搜索“ruby 文本替换”会为您提供所需的所有信息。请在提问前进行研究。
  • 我发错了,我的意思是我想更新打开文件的内容,而不是只替换一个字符串

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

无法动态修改文件的内容。文件只能追加,不能扩展,所以不能用her替换my

你可以从这个基本代码开始:

buf = ""

File.open('myfile.txt') do |file|
    file.readlines.each do |line|
        buf << line.gsub('my', "her")
    end
end

File.open('myfile.txt', 'w') do |file|
    file << buf
end

【讨论】:

    【解决方案2】:
    line.gsub!(/my/, "her")
    

    虽然您可能希望更具体地使用正则表达式,例如

    line.gsub!(/\bmy\./, "her")
    

    【讨论】:

    • gsub和gsub有什么区别! ?
    • .gsub!替换字符串本身
    • 我试过了,它确实替换了字符串,但是文件的内容没有改变。我想更新打开文件的内容...
    • 如果文件不是太大,将其读入内存,随时进行替换,完成后将文件写回。在某些情况下它很重,但如果你的文件足够小,这不是一个糟糕的解决方案。我对一点一点地替换东西持怀疑态度……如果您的流程出现故障并且您已经处理了一半的文件,那么您可能会遇到问题。但是,收集输出 THEN writing 至少可以缩小此类问题发生的窗口。
    猜你喜欢
    • 2019-02-10
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    相关资源
    最近更新 更多