Используйте программу командной строки xsd.exe, которая идет с Visual Studio для создания файлов класса, которые можно использовать в проекте/решении и Системе. Xml. Пространство имен сериализации (а именно, класс XmlSerializer) к serialize/deserialze те классы к и от диска.
Я предполагаю, что вы используете здесь optparse, хотя тот же метод будет работать для других библиотек синтаксического анализа параметров.
Самый простой способ - это, вероятно, проанализировать параметры с помощью выбранной вами библиотеки синтаксического анализа параметров, а затем вызвать исключение OptionParser :: MissingArgument, если значение host равно нулю.
Следующий код иллюстрирует
#!/usr/bin/env ruby
require 'optparse'
options = {}
optparse = OptionParser.new do |opts|
opts.on('-h', '--host HOSTNAME', "Mandatory Host Name") do |f|
options[:host] = f
end
end
optparse.parse!
#Now raise an exception if we have not found a host option
raise OptionParser::MissingArgument if options[:host].nil?
puts "Host = #{options[:host]}"
Запуск этого примера с в командной строке
./program -h somehost
просто отображается «Host = somehost»
При работе с отсутствующим -h и без имени файла выводится следующий результат
./program:15: missing argument: (OptionParser::MissingArgument)
А при запуске с командной строкой ./program -h -
/usr/lib/ruby/1.8/optparse.rb:451:in `parse': missing argument: -h (OptionParser::MissingArgument)
from /usr/lib/ruby/1.8/optparse.rb:1288:in `parse_in_order'
from /usr/lib/ruby/1.8/optparse.rb:1247:in `catch'
from /usr/lib/ruby/1.8/optparse.rb:1247:in `parse_in_order'
from /usr/lib/ruby/1.8/optparse.rb:1241:in `order!'
from /usr/lib/ruby/1.8/optparse.rb:1332:in `permute!'
from /usr/lib/ruby/1.8/optparse.rb:1353:in `parse!'
from ./program:13
Подход с использованием OPTPARSE, который обеспечивает дружественный выход на пропущенные коммутаторы:
#!/usr/bin/env ruby
require 'optparse'
options = {}
optparse = OptionParser.new do |opts|
opts.on('-f', '--from SENDER', 'username of sender') do |sender|
options[:from] = sender
end
opts.on('-t', '--to RECIPIENTS', 'comma separated list of recipients') do |recipients|
options[:to] = recipients
end
options[:number_of_files] = 1
opts.on('-n', '--num_files NUMBER', Integer, "number of files to send (default #{options[:number_of_files]})") do |number_of_files|
options[:number_of_files] = number_of_files
end
opts.on('-h', '--help', 'Display this screen') do
puts opts
exit
end
end
begin
optparse.parse!
mandatory = [:from, :to] # Enforce the presence of
missing = mandatory.select{ |param| options[param].nil? } # the -t and -f switches
unless missing.empty? #
raise OptionParser::MissingArgument.new(missing.join(', ')) #
end #
rescue OptionParser::InvalidOption, OptionParser::MissingArgument #
puts $!.to_s # Friendly output when parsing fails
puts optparse #
exit #
end #
puts "Performing task with options: #{options.inspect}"
работает без -T
или -F
коммутаторов, показывает следующий вывод:
Missing options: from, to
Usage: test_script [options]
-f, --from SENDER username of sender
-t, --to RECIPIENTS comma separated list of recipients
-n, --num_files NUMBER number of files to send (default 1)
-h, --help
Запуск анализа Метод в пункте «Начало / спасение» позволяет использовать дружеские форматирование по другим сбоям, таким как отсутствующие аргументы или неверные значения переключателя, например, попробуйте пройти строку для коммутатора -N
.
Ответ от unknown (Google) - это хорошо, но содержит небольшую ошибку.
rescue OptionParser::InvalidArgument, OptionParser::MissingArgument
должно быть
OptionParser::InvalidOption, OptionParser::MissingArgument
В противном случае optparse.parse!
вызовет стандартный вывод ошибки для OptionParser :: InvalidOption
, а не для настраиваемого сообщения.