Boost logo

Boost Users :

Subject: Re: [Boost-users] Multiple Multitokens
From: David Doria (daviddoria_at_[hidden])
Date: 2009-04-15 07:45:16


Volodya, thanks for the help thus far, I think I am close to getting it to
work. According to the post you referred me to, multiple of the same
parameter are not collapsed, ie
--list a.txt b.txt --list c.txt d.txt
Should give me access to the two separate lists.

I tried declaring the parameter as usual:
("list", po::value<vector<string> >()->multitoken(), "Lists.")

And then I thought it may be the .count property?

cout << "There are " << vm.count("list") << " lists." << endl;

But there is only 1 list.

The idea was to do this:

vector<vector<string> > lists;
    for(unsigned int list = 0; list < vm.count("list"); list++)
    {
        vector<string> l = vm["list"].as<vector<string> >();
        lists.push_back(l);

        for(unsigned int item = 0; item < lists[list].size(); item++)
            cout << "List: " << list << " Item: " << item << " " <<
lists[list][item] << endl;
    }

Clearly I am still missing the part about accessing the separated "list"
params. Can you see the problem here?

Thanks,

David

>
> David Doria wrote:
>
> > I want to do something like this:
> > --NumLists 2 --List0 a.txt b.txt --List1 c.txt d.txt
> >
> > vector<vector<string> > Lists(2);
> >
> > po::options_description desc("Allowed options");
> > desc.add_options()
> > ("help", "produce help message")
> > ("List0", po::value<vector<string>
> >(&Lists[0])->multitoken(),
> > "List0.")
> > ("List1", po::value<vector<string>
> >(&Lists[1])->multitoken(),
> > "List1.")
> > ;
> >
> > But if I wanted to handle --NumLists 10, I would have to manually add
> List0,
> > List1, ... List10 as parameters. That seems a bit silly, but maybe this
> is a
> > very odd usage?
>
> Well, it's somewhat odd :-)
>
> > Please let me know if you can think of a better way to
> > handle this.
>
> Well, as a remark, your command line interface will make users cry:
>
> - Do you really want users to type uppercase letters? (Use can use
> case-insensitive mode, of course, and allow any spelling, but upper
> case in your example seems strange.
> - Do you really want users to count lists and pass 0, 1, 2, etc explicitly?
> - Why do you need explicit specification of the number of lists?
>
> I'd use:
>
> --list a.txt b.txt --list c.txt d.txt
>
> You might find the recent thread useful for handling such command lines:
>
> http://permalink.gmane.org/gmane.comp.lib.boost.user/46405
>
> - Volodya
>
>
>



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