Я написал сценарий для чтения 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 "], что было моей первоначальной проблемой. Что я не понимаю?
Я получаю эту ошибку, если удалить, что: ./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
вы должны сделать 'files.each do | file | ...' - а затем внутри блока вы будете иметь переменную 'file', которая будет« file1 », а затем« file 2 ». –