Имея проблемы с поиском через файл и заменой

У меня возникли проблемы с поиском файла и редактированием определенных параметров файла. Код ниже

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, и мне нужно, чтобы он читал файл, заменялся как с любыми входами пользователя, так и с сохранением / записью изменений в файл.

0
задан 13 August 2018 в 15:57

2 ответа

он дважды печатает содержимое файла, и я могу только предположить его, потому что его внутри цикла 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        
2
ответ дан 15 August 2018 в 17:00

Вам нужно будет повторно использовать 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}")
1
ответ дан 15 August 2018 в 17:00

Другие вопросы по тегам:

Похожие вопросы: