2014-09-28 4 views
0

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

def host_count(*files) 

begin 

    files.each do 
     files = files.join(' ') 
     read = IO.read(files) 
     reg = read.scan(/(?:\d{1,3}\.){3}\d{1,3}/).size 

     puts "There are " << reg.to_s << " IP addresses in #{files}." 
    end 

rescue Errno::ENOENT 
    puts "File #{files} does not exist!" 

rescue TypeError 
    puts "Usage: #{$0} [file]" 
    puts "Example: #{$0} /home/user/ipfile.txt" 
end 

end 


host_count(ARGV) 

Запуск этого сценария с несколькими файлами дает мне эту ошибку:

File file1 file2 does not exist!

Они не разделены запятыми или что-нибудь, так что это не читает мои аргументы, как: [ «file1», "file2 "], что было моей первоначальной проблемой. Что я не понимаю?

ответ

0

Вы писали

files.each do 
    files = files.join(' ') 

Почему ты сделал это? вы меняете массив. массив «files» уже является массивом, вам не нужно присоединяться к нему со строками.

edit1: получить конкретный файл для каждого запуска, вы должны написать:

files.each do |file| 
    puts file # will print "file 1", and in the next iteration will print "file 2". 
end 
+0

Я получаю эту ошибку, если удалить, что: ./ipcount.rb:13:in 'чтения«: может» t преобразовать Array в String (TypeError). Если я изменил: read = IO.read (files): read = IO.read (files.to_s), то я получаю эту ошибку: ./ipcount.rb:13:in 'read ': Нет такого файла или каталога - [ ["file1", "file2"]] (Errno :: ENOENT) Вот почему я изначально попытался удалить запятые с помощью join. – user3674736

+0

вы должны сделать 'files.each do | file | ...' - а затем внутри блока вы будете иметь переменную 'file', которая будет« file1 », а затем« file 2 ». –

Смежные вопросы