我是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"在该文件的那一行。谁能告诉我这里有什么问题?感谢
答案 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行关闭文件。