Найти и заменить в файле в Ruby - PullRequest
4 голосов
/ 02 августа 2011

У меня есть небольшая программа, которую я пишу на ruby. Я нашел хороший кусок кода здесь, в SO, чтобы найти и заменить что-то в файле, но, похоже, он не работает. Вот код:

#!/usr/bin/env ruby

DOC = "test.txt"
FIND = /,,^M/
SEP = "\n"

#make substitution
File.read(DOC).gsub(FIND, SEP)

#Check if the line already exist
unique_lines = File.readlines(DOC).uniq

#Save the result in a new file
File.open('test2.txt', 'w') { |f| f.puts(unique_lines) }

Спасибо всем!

1 Ответ

8 голосов
/ 02 августа 2011

Я пропускаю проверку, которую вы делаете, чтобы увидеть, существует ли уже линия, и обычно идет что-то вроде этого (здесь я хочу заменить 'FOO' на 'BAR'):

full_path_to_read = File.expand_path('~/test1.txt')
full_path_to_write = File.expand_path('~/test2.txt')

File.open(full_path_to_read) do |source_file|
  contents = source_file.read
  contents.gsub!(/FOO/, 'BAR')
  File.open(full_path_to_write, "w+") { |f| f.write(contents) }
end

Использование expand_path также, вероятно, немного педантично, но мне это нравится, просто чтобы я случайно не забил какой-то файл, который не хотел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...