这是家庭作业,我不指望你给我完整的答案。
我正在尝试解析命令行条目,例如:
./apacheReport.rb -u testlog.txt
当我输入时:
./apacheReport.rb -u testlog.txt
我明白了:
Argument required
我的代码是:
require_relative 'CommonLog'
require 'optparse'
# puts ARGV.inspect
optparser = OptionParser.new
optU = false
optI = false
optS = false
optH = false
optparser.banner = "apacheReport.rb [options] filename"
optparser.parse!
rescue => m
puts m.message
puts optparser
exit
end
if ARGV.length < 1
puts "Argument required"
exit
end
userInputFile = ARGV[0]
userInputFile.to_s
file = CommonLog.new(userInputFile)
它应该将命令的剩余部分解析为ARGV[0]
,然后将其存储为userInputFile
,然后使用该文件作为构造函数创建CommonLog对象。此时,我调用命令中指定的方法。
似乎由于某种原因,我的ARGV没有被退回。我不确定是什么问题。
答案 0 :(得分:0)
Ruby的OptionParser易于使用,但您必须通过文档来解决问题。这是一个对您的代码有用的小例子:
require 'optparse'
options = {}
OptionParser.new do |opt|
opt.on('-u', '--use_this FILE', 'Use this file') { |o| options[:use_this] = o }
end.parse!
options
将包含标志。在这种情况下,如果您传入-u foo
,则options[:use_this]
将为foo
。
保存并尝试在没有参数的情况下运行它。还可以尝试使用-h
标志运行它。
您可以search StackOverflow获取有关我处理OptionParser的更多答案。
答案 1 :(得分:0)
由于您的代码目前似乎无法正常工作,因此很难分辨出错误。问题可能是the parse!
method从ARGV
中删除了找到的选项。所以当你写:
optparser.parse!
它删除了两个参数(-u testlog.txt
),此代码始终失败:
if ARGV.length < 1
puts "Argument required"
exit
end
您需要正确设置ARGV
,而不是查看optparser
。也许是这样的事情:
optparser = OptionParser.new do |opts|
opts.banner = "apacheReport.rb [options] filename"
opts.on("-u", "--u-short-for-this", "Whatever u stands for") do |u|
optU = u
end
end
只有当用户通过optU
并且文件名将位于-u
时,ARGV[0]
才会成立。