Относительно аргументов командной строки Java - PullRequest
0 голосов
/ 11 марта 2010

У меня есть следующие аргументы командной строки для программы. Аргумент proc является обязательным. Аргумент chgval является необязательным, а аргумент inputfile является необязательным.

. / Test.sh -proc mode1 -chval a -inputfile b.csv

Мне нужно изменить указанную ниже функцию, чтобы в аргументах командной строки присутствовал один из необязательных аргументов вместе с обязательным аргументом proc. Если у меня есть два необязательных аргумента chval, входной файл в командной строке вместе с обязательным аргументом 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;
  }

Что нужно изменить?

Ответы [ 2 ]

2 голосов
/ 11 марта 2010

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.

2 голосов
/ 11 марта 2010

Если вы имеете в виду, что inputfile и chgval должны быть взаимоисключающими, то вы должны использовать OptionGroup

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...