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
?