繁体   English   中英

用Ruby替换文件中的单词

[英]Replace a word in a file in Ruby

我是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”。 谁能告诉我这里有什么问题? 谢谢

您还需要回写该文件。 没有任何参数的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

或者你可以把它做成一个班轮

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

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

我会推荐这个:

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行关闭文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM