用Ruby替换文件中的单词

时间:2014-03-11 20:10:41

标签: ruby-on-rails ruby string file

我是Ruby新手,我一直在尝试替换文件中的单词。代码如下:

File.open("hello.txt").each do |li|
  if (li["install"])
  li ["install"] = "latest"
  puts "the goal state set to install, changed to latest"
  end
end

虽然一旦put中的消息被打印一次,但该单词不会更改为" latest"在该文件的那一行。谁能告诉我这里有什么问题?感谢

3 个答案:

答案 0 :(得分:17)

您还需要回写该文件。没有任何参数的File.open打开文件进行读取。你可以试试这个:

# load the file as a string
data = File.read("hello.txt") 
# globally substitute "install" for "latest"
filtered_data = data.gsub("install", "latest") 
# open the file for writing
File.open("hello.txt", "w") do |f|
  f.write(filtered_data)
end

答案 1 :(得分:10)

或者你可以把它变成一个单一的

File.write("hello.txt",File.open("hello.txt",&:read).gsub("install","latest"))

答案 2 :(得分:2)

您的代码存在的问题是您没有将更改的行写入文件。

我建议这样做:

lines = IO.readlines("hello.txt")
for line in lines
    if line["install"]
        line["install"] = "latest"
    end
end
f = File.open("hello.txt", "w")
for line in lines
    f.puts(line)
end
f.close

在第1行中,IO.readlines()返回一个包含文件中所有行的数组。程序的其余部分基本上是相同的,直到我们到达第6行,文件被打开。文件模式" w"告诉Ruby覆盖文件,这就是我们想要的。在第8行中,我们使用file.puts将每行返回到文件中,并进行修改。我们使用puts代替write,因为IO.readlines()会截断所有换行符,puts会追加换行符,而write则不会。最后,第10行关闭文件。