Boost logo

Boost Users :

Subject: Re: [Boost-users] [program options] count problem
From: Olivier Tournaire (olitour_at_[hidden])
Date: 2013-02-02 09:57:19


Thanks Diederick. Did not do the trick.
How I can I access the variables stored in vm ?

Regards,

Olivier

2013/2/2 Diederick C. Niehorster <dcnieho_at_[hidden]>

> This call I use works for me:
> po::command_line_parser(argc, ppargv).options(desc).run()
>
> Don't know if there is an important difference here, or if what you
> call is just a wrapper around it, but see if that works for you.
>
> Best,
> Dee
>
> On Sat, Feb 2, 2013 at 9:14 PM, Olivier Tournaire <olitour_at_[hidden]>
> wrote:
> > Oups. Made à mistake ... However the issue is still there:
> >
> > if (vm.count("hierarchy"))
> > {
> > path input_path(hierarchy);
> > // DO STUFF
> > }
> > else if (vm.count("file"))
> >
> > {
> > for(unsigned int i=0;i<files.size();++i)
> > {
> > path input_path(files[i]);
> > // DO STUFF
> > }
> > }
> > else if (vm.count("directory"))
> >
> > {
> > for(unsigned int i=0;i<directories.size();++i)
> > {
> > path input_path(directories[i]);
> > // DO STUFF
> > }
> > }
> > else
> > {
> > cout << "You must choose an option between --hierarchy --file
> > --directory!" << endl;
> >
> > cout << desc << endl;
> > return 1;
> > }
> >
> >
> >
> > Le samedi 2 février 2013, Olivier Tournaire a écrit :
> >
> >> Hi all,
> >>
> >> I am having troubles with program options. I try to test if at least
> some
> >> of the available options are passed on the command line, but fail for
> some
> >> reason using count("option_name"). Here is my code:
> >>
> >> int main(int argc, char** argv)
> >> {
> >> string hierarchy;
> >> vector<string> files, directories;
> >> double vertical_shift;
> >> bool show_progress, single_file, single_dir;
> >> int target_EPSG, nb_threads;
> >>
> >> po::options_description desc("Allowed options");
> >> desc.add_options()
> >> ("help ,h"
> >> , "Produce help message")
> >> ("hierarchy ", po::value<string>(&hierarchy)
> >> , "process a hierarchy)
> >> ("file ", po::value<vector<string> >(&files)
> >> , "process the specified files")
> >> ("directory ", po::value<vector<string> >(&directories)
> >> , "process the specified directories");
> >>
> >> po::variables_map vm;
> >> try
> >> {
> >> po::store(po::parse_command_line(argc, argv, desc), vm);
> >>
> >> if (vm.count("help"))
> >> {
> >> cout << desc << "\n";
> >> return 1;
> >> }
> >>
> >> po::notify(vm);
> >> }
> >> catch (const po::error &e)
> >> {
> >> cerr << "Exception caught ! --> " << e.what() << endl;
> >> cout << desc << endl;
> >> return 1;
> >> }
> >>
> >> if (vm.count("hierarchy"))
> >> {
> >> path input_path(hierarchy);
> >> // DO STUFF
> >> }
> >> else if (vm.count("files"))
> >> {
> >> for(unsigned int i=0;i<files.size();++i)
> >> {
> >> path input_path(files[i]);
> >> // DO STUFF
> >> }
> >> }
> >> else if (vm.count("directories"))
> >> {
> >> for(unsigned int i=0;i<directories.size();++i)
> >> {
> >> path input_path(directories[i]);
> >> // DO STUFF
> >> }
> >> }
> >> else
> >> {
> >> cout << "You must choose an option between --hierarchy --files
> >> --directories!" << endl;
> >> cout << desc << endl;
> >> return 1;
> >> }
> >>
> >>
> >> I always fall in the "else". What am I doing wrong?
> >>
> >> For instance with this command line : ./acute_coordinates_transform
> >> --hierarchy ~/work/data/
> >>
> >> À other question: is there à way to specify that 1 of the 3 options is
> >> required (and only 1)?
> >>
> >> Hope you cloud help.
> >>
> >> Regards,
> >>
> >> Olivier
> >
> >
> > _______________________________________________
> > Boost-users mailing list
> > Boost-users_at_[hidden]
> > http://lists.boost.org/mailman/listinfo.cgi/boost-users
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net