У меня возникли проблемы с поиском файла и редактированием определенных параметров файла. Код ниже
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, и мне нужно, чтобы он читал файл, заменялся как с любыми входами пользователя, так и с сохранением / записью изменений в файл.
Нет, это потому, что вы добавляете его дважды:
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
Вам нужно будет повторно использовать 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 = text.gsub(/textToReplace/, "#{ReplaceWithThis}").gsub(/textToReplace2/, "#{ReplaceWithThis2}")