Ищите идиоматический способ регулярного выражения текстового файла в Ruby - PullRequest
3 голосов
/ 12 августа 2011

Я ищу идиоматический способ регулярной обработки текстового файла в Ruby, и вот лучшее, что я смог до сих пор придумать. Он удаляет все " символов:

#!/usr/bin/env ruby

src_name = ARGV[0]
dest_name = ARGV[1]
File.open(src_name, "r+") { |f| 
  new_lines = f.map { |l| 
    l = l.gsub(/"/,'')
  }
  dest_file = File.new(dest_name,"w")
  new_lines.each { |l|
    dest_file.puts l
  }
}

Должно быть что-то лучше. Например:

  • Почему я должен переписать файл, если я не смогу сделать что-то более умное с трубами?
  • Я делаю все построчно, похоже, я должен быть в состоянии решить проблему с потоками ввода и вывода.

Ответы [ 2 ]

2 голосов
/ 12 августа 2011

Ответ Евгения потрясающий. Здесь то же самое, что и «нормальный» скрипт.

#!/usr/bin/env ruby
STDOUT << STDIN.read.gsub(/"/,'') 
1 голос
/ 12 августа 2011

Если вы собираетесь выполнить простую замену таким образом, вы можете сделать это в командной строке следующим образом:

ruby -e '$_.gsub!(/"/,"")' -i.bak -p INPUT_FILE.txt

Он запускает все, что вы передаете в качестве аргумента флага -e, заменяет содержимоеINPUT_FILE.txt с результатом и просто для безопасности сохраняет копию оригинала с расширением .bak.

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