Ruby 在搜索文件和替换文件时遇到问题

Ruby 在搜索文件和替换文件时遇到问题,ruby,Ruby,我在搜索文件和编辑文件的某些参数时遇到了一些问题。代码如下 file_names = ["#{fileNameFromUser}"] file_names.each do |file_name| text = File.read(file_name) replacedcontent = text.gsub(/textToReplace/, "#{ReplaceWithThis}") replacedcontent += text.gsub(/textToReplace2/, "#{Rep

我在搜索文件和编辑文件的某些参数时遇到了一些问题。代码如下

file_names = ["#{fileNameFromUser}"]

file_names.each do |file_name|
 text = File.read(file_name)
 replacedcontent = text.gsub(/textToReplace/, "#{ReplaceWithThis}")
 replacedcontent += text.gsub(/textToReplace2/, "#{ReplaceWithThis2}")

# To write changes to the file, use:
File.open(file_name, "w") {|file| file.puts replacedcontent}
end

所以现在它所做的是打印文件的内容两次,我只能假设它在
do
循环中。我在这里的最终目标是文件具有
textToReplace
textToReplace2
,我需要它来读取文件,用用户输入的内容替换它们,并保存/写入对文件的更改。

您需要重复使用
replacedcontent
,而不是将其串联起来,以避免打印两次

file_names = ["#{fileNameFromUser}"]

file_names.each do |file_name|
text = File.read(file_name)
replacedcontent = text.gsub(/textToReplace/, "#{ReplaceWithThis}")
replacedcontent = replacedcontent.gsub(/textToReplace2/, "#{ReplaceWithThis2}")

# To write changes to the file, use:
File.open(file_name, "w") {|file| file.puts replacedcontent}
end


您需要重新使用
replacedcontent
,而不是将其串联,以避免打印两次

file_names = ["#{fileNameFromUser}"]

file_names.each do |file_name|
text = File.read(file_name)
replacedcontent = text.gsub(/textToReplace/, "#{ReplaceWithThis}")
replacedcontent = replacedcontent.gsub(/textToReplace2/, "#{ReplaceWithThis2}")

# To write changes to the file, use:
File.open(file_name, "w") {|file| file.puts replacedcontent}
end

它将文件内容打印两次,我只能假设它在
do
循环中

不,这是因为您附加了两次:

text = first_replacement_result
text += second_replacement_result
有两种方法可以做到这一点:一种是突变:

text.gsub!(...) # first replacement that changes `text`
text.gsub!(...) # second replacement that changes `text` again
或链式替换:

replacedcontent = text.gsub(...).gsub(...) # two replacements one after another        
它将文件内容打印两次,我只能假设它在
do
循环中

不,这是因为您附加了两次:

text = first_replacement_result
text += second_replacement_result
有两种方法可以做到这一点:一种是突变:

text.gsub!(...) # first replacement that changes `text`
text.gsub!(...) # second replacement that changes `text` again
或链式替换:

replacedcontent = text.gsub(...).gsub(...) # two replacements one after another        

“#{fileNameFromUser}”
fileNameFromUser.clone
相同,但后者更易于阅读。但是我认为在你的代码中没有克隆的必要,因为字符串没有被变异;所以
fileNameFromUser
就足够了,不是吗?如果文件最初包含
12
,替换内容是
1=>2
2=>3
,那么最终结果应该是
23
还是
33
“{fileNameFromUser}”
fileNameFromUser.clone
相同,但后者更容易阅读。但是我认为在你的代码中没有克隆的必要,因为字符串没有被变异;所以
fileNameFromUser
就足够了,否?如果文件最初包含
12
,替换为
1=>2
2=>3
,那么最终结果应该是
23
还是
33