Знаю, вопрос уже избитый. Но вот никак ничего подходящего для меня не могу найти. Отсюда (перечень гнутых утилит для обработки параметров) "в сыром виде" ничего не подходит.
Когда-то я накатал себе такую штуку, позволяющую легко при помощи одной структуры парсить опции, заполняя глобальные параметры, а также формировать строку помощи.
Но вот понадобилось мне реализовать возможность задания определенных параметров несколько раз. И пришлось ваять это (почти весь день сегодня убил, благо, полдня ЛОР лежал и ничто не отвлекало). (на ЖЖшке).
Вот что получается при запуске:
./myopt_example -a 1e-5 -f type=as:xsz=5s something -a 3e-9 -f type=med:ysz=15 some_more -s again -f xsz=5 -s more -M diam=8:foc=10 -vvvv
Globals:
S_dev = 8 (default)
randAmp[0]: 1e-05
randAmp[1]: 3e-09
meet str args:
str[0] = again
str[1] = more
S_interp = 100
S_image = 1000
N_phot = 10000
randMask = 0
Mirror =
D = 8
F = 10
Zincl = 0
Aincl = 0
rewrite_ifexists = 0
verbose = 4
There's also 2 free parameters:
0: something
1: some_more
filter parameters:
0:
Wrong argument "5s" of parameter "xsz"
bad params
1:
filtertype = med, sizes: 3x15
2:
filtertype = (null), sizes: 5x3
parce_args
функцию) обработка вложенных аргументов и постобработка вложенных аргументов (filter parameters) — уже вне велосипеда.Однако, скажем, ffmpeg умеет делать такие сложные вещи, как определение групп параметров между одноименными ключами. Как бы и мне сделать так, чтобы, скажем,
./myopt_example -f filt1:xzs=10 -h 10 -v 20 -f filt2:ysz=20 -s par -f filt3
Есть ли вообще библиотеки, умеющие сложный парсинг аргументов командной строки без съезжания крыши у пишущего код? А то я со своим-то велосипедом чуть не рехнулся с этими двойными и тройными указателями!