2010-03-11 3 views
0

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

./test.sh -proc mode1 -chval -inputfile b.csv

Мне нужно изменить ниже функцию так, чтобы ни один из необязательного аргумента должен существует в качестве аргументов командной строки наряду с обязательным аргументом proc. Если у меня есть два необязательных аргумента chval, inputfile в командной строке вместе с обязательным аргументом proc, который он разрешает сейчас. Я не хочу, чтобы это произошло, это должно было вызвать ошибку.

Перечислены допустимые значения ниже, а остальные должны быть ошибка

./test.sh -proc mode1 -chval

./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

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.

+0

+1 для расширения моего ответа – Dancrumb

+0

Большое спасибо за информацию. – Arav

2

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

+0

Что мне нужно изменить в вышеуказанной функции? – Arav

+0

Большое спасибо за информацию – Arav

Смежные вопросы