Этот демонстрация вид делает это путем помещения календаря по текстовому полю, таким образом, Вы не можете ввести в нем. Можно также установить поле ввода на только для чтения в HTML, чтобы быть уверенными.
Заявление об отказе от ответственности: Этот подход является наивной иллюстрацией возможностей ruby, а не производственным решением для замены строки в файлах. Это' s подвержены различным сценариям сбоев, таким как потеря данных в случае сбоя, прерывания или переполнения диска. Этот код не годится ни для чего, кроме быстрого одноразового скрипта, в котором создается резервная копия всех данных. По этой причине не копируйте этот код в свои программы.
Вот краткий способ сделать это.
file_names = ['foo.txt', 'bar.txt']
file_names.each do |file_name|
text = File.read(file_name)
new_contents = text.gsub(/search_regexp/, "replacement string")
# To merely print the contents of the file, use:
puts new_contents
# To write changes to the file, use:
File.open(file_name, "w") {|file| file.puts new_contents }
end
На самом деле нет способа редактировать файлы на месте. Что вы обычно делаете, когда это может сойти с рук (например, если файлы не слишком большие), так это считывание файла в память ( File.read
), выполнение ваших замен в строке чтения ( String # gsub
), а затем запишите измененную строку обратно в файл ( File.open
, File # write
).
Если файлы достаточно большие чтобы это было невозможно, вам нужно прочитать файл по частям (если шаблон, который вы хотите заменить, не будет охватывать несколько строк, то один фрагмент обычно означает одну строку - вы можете использовать File.foreach
, чтобы прочитать файл построчно), и для каждого фрагмента выполните в нем замену и добавьте его во временный файл. Когда вы закончите перебирать исходный файл,
На самом деле в Ruby есть функция редактирования на месте. Как и Perl, вы можете сказать
ruby -pi.bak -e "gsub(/oldtext/, 'newtext')" *.txt
. Это применит код в двойных кавычках ко всем файлам в текущем каталоге, имена которых заканчиваются на «.txt». Резервные копии редактируемых файлов будут создаваться с расширением «.bak» (думаю, «foobar.txt.bak»).
ПРИМЕЧАНИЕ: похоже, это не работает для многострочного поиска. Для них вы должны сделать это другим, менее красивым способом, с помощью сценария-оболочки вокруг регулярного выражения.