我为程序设置了以下命令行参数。参数proc是必需参数chgval是可选的,参数inputfile是可选的。
./ test.sh -proc mode1 -chval a -inputfile b.csv
我需要修改下面的函数,这样任何一个可选参数都应该存在于命令行参数和强制参数proc中。如果我有两个可选参数chval,命令行中的inputfile以及它现在允许的强制参数proc。我不希望它发生它应该抛出错误。
列出下面的有效值,其余的应该是错误
./ test.sh -proc mode1 -chval a
./ test.sh -proc mode1 -inputfile b.csv
./ test.sh -proc mode1
public static Options usage() {
Option proc = OptionBuilder.withArgName("proc")
.hasArg()
.isRequired()
.withDescription("Process Mode for testing:")
.create("proc");
Option chgval = OptionBuilder.withArgName("chgval")
.hasArg()
.withDescription("chg eeds to be Processed")
.create("chgval");
Option inputFile = OptionBuilder.withArgName("inputfile")
.hasArg()
.withDescription("Name of the input file")
.create("inputfile");
Options options = new Options();
options.addOption(proc);
options.addOption(chgval);
options.addOption(inputFile);
return options;
}
需要修改什么?
答案 0 :(得分:2)
如果您的意思是inputfile
和chgval
应该是互斥的,那么您应该使用OptionGroup
答案 1 :(得分:2)
Dancrumb是正确的,因为您使用OptionGroup
的互斥选项。以下是如何将它用于您的情况:
Options options = new Options();
OptionGroup group1 = new OptionGroup();
group1.addOption(chgval);
group1.addOption(inputFile);
options.addOption(proc);
options.addOptionGroup(group1);
现在,chgval
和inputFile
是互斥选项。对于"-proc mode1 -chgval a -inputfile b.csv"
之类的参数,它会抛出AlreadySelectedException:
“指定了inputfile
选项,但已选择此组中的选项:chgval
”。
顺便说一句,我也注意到您在chval
和chgval
之间的帖子不一致。