Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost program option parsing issue.
From: Tarcisio Fedrizzi (tarcisio.fedrizzi_at_[hidden])
Date: 2013-08-22 11:36:05


Hi,
this does the trick:

( "input-file", po::value<string>(&inputFile)->implicit_value(""), "input
file name" )

note the implcit_value call added.
In this way the parse works as you need.

Best regards,
Tarcisio Fedrizzi

On Thu, Aug 22, 2013 at 3:58 PM, Vivek Anand <vickywindwin_at_[hidden]> wrote:

> On Thu, Aug 22, 2013 at 5:58 PM, Tarcisio Fedrizzi
> <tarcisio.fedrizzi_at_[hidden]> wrote:
> >
> > Hi,
> > why would you need to run the program with --input-file without a value?
>
> A third-party client will be using my program through a script or
> through exec(). I do not have control over that code.
>
> Currently, my validation check throws error that output-file not
> specified. Actually its the input file which is missing.
>
> >
> > If you want to set the inputFile variable to a default value if it is
> not specified
> > on the command line simply assign it where you declare the variable.
> Alternatively
> > you can assign the variable like this:
> >
> > if (vm.count("input-file")) {
> > ...
> > } else {
> > inputFile = "whatever";
> > }
> >
> > Best regards,
> > Tarcisio Fedrizzi
> >
> >
> >
> > On Mon, Aug 19, 2013 at 6:46 PM, Vivek Anand <vickywindwin_at_[hidden]>
> wrote:
> >>
> >> Hi All,
> >>
> >> I am using program option for my program. Here is my code snippet
> >>
> >> string inputFile, outputFile;
> >>
> >> /* Populate command line arguments */
> >> po::options_description desc("Usage: KDMGenerator [OPTIONS]");
> >> {
> >> desc.add_options()
> >> ("help", "prints this message")
> >> ( "input-file", po::value<string>(&inputFile), "input file
> name" )
> >> ( "output-file", po::value<string>(&outputFile), "output
> file name");
> >> }
> >>
> >> po::variables_map vm;
> >> po::store(po::parse_command_line(argc, argv, desc), vm);
> >> po::notify(vm);
> >>
> >> if (vm.count("help") || !vm.size())
> >> {
> >> cout <<desc;
> >> return 0;
> >> }
> >>
> >> if(vm.count("input-file"))
> >> {
> >> cout << "Input file :" << inputFile << '\n';
> >> }
> >>
> >> if(vm.count("output-file"))
> >> {
> >> cout << outputFile << '\n';
> >> }
> >>
> >>
> >> The issue I am facing is that if i I call my program without passing
> value for input file, something like
> >>
> >> ./myapp --input-file --output-file out.txt
> >>
> >> I get Input file: --output-file
> >>
> >>
> >> i.e the value "--output-file" get stored in inputFile and
> vm.count("output-file") returns zero.
> >>
> >> Is this the desired behavior? Is there any workaround for this?
> >>
> >> --
> >> Vivek,
> >>
> >>
> >> _______________________________________________
> >> 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
>
>
>
>
> --
> Warm regards ,
> Vivek,
> (¨`·.·´¨) Always
> `·.¸(¨`·.·´¨) Keep Smiling
> (¨`·.·´¨)¸.·´ N Be Happy!!
> `·.¸.·´
> _______________________________________________
> 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