Вызовите скрипт Ruby для нескольких входных файлов с подстановочными знаками - PullRequest
0 голосов
/ 25 октября 2010

Я относительно новичок в Ruby и мне нужно написать скрипт, который будет обрабатывать несколько входных файлов. Это следует называть так:

script.rb -i file*

, где каталог содержит несколько файлов, например file1.xml, file2.xml и т. Д. Просто быстрый вопрос: как будет расширен этот шаблон? Нужно ли программировать это в моем сценарии? Я использую класс OptionParser для анализа аргументов командной строки.

Спасибо!

Ответы [ 4 ]

5 голосов
/ 25 октября 2010

Подстановочный знак расширяется командной строкой, поэтому вы получите список каждого файла в каталоге

C:\working>dir *.txt

05/10/2007 03:24 PM 46,101      config.txt
11/23/2004 11:54 AM 361           tips.txt
2 File(s) 46,462 bytes

Если вы это сделаете,

C:\working>ruby -e "puts ARGV" *.txt
config.txt
tips.txt

Ruby преобразует строку *.txt в соответствующие имена файлов и передайте расширенный массив в качестве нового аргумента.

Использование optparse:

options = {}
OptionParser.new do |opts|
    opts.on("-i", Array, "List files") do |v|
      options[:files] = v
    end
  end.parse!

p options

C:\working> script.rb -i *.txt

Распечатает:

["config.txt","tips.txt"]

Результатв опциях [: files] - массив строк

http://www.ruby -forum.com / topic / 111252

2 голосов
/ 25 октября 2010

Странная идея использовать переключатель -i и список файлов, если ваш сценарий принимает файлы, может быть, сделать это без -i и использовать переключатели для других параметров?Если это так, просто используйте ARGV.

1 голос
/ 26 октября 2010

Для Unix, если вы хотите передать подстановочный знак самому Ruby, вам нужно его избежать (например, поставить его в кавычки). Я использовал этот подход, когда в командной строке возникало количество файлов (что, вероятно, является плохим признаком!).

0 голосов
/ 25 октября 2010
Dir["*.txt"].each do |file|
   o = open("tempfile","a")
   open(file).each do |line|
     # lines for processing
     # .....
       o.write(...)
   end
   o.close
   File.rename("tempfile",file)
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...