Difference between revisions of "Tutorial:OptionParser"
(→Program description) |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | <font color="red"> WARNING: Tutorial writing in progress, some errors may exist.</font> | ||
+ | |||
+ | |||
+ | |||
This is an example of how to add and use the MSL command-line parser ( '''[[MSL Objects:OptionParser|OptionParser object]]''' ). This tutorial will also discuss the common conventions used when using OptionParser to write MSL programs. It is good to follow these conventions so that most MSL developers can easily read and help fix the option parsing code of any MSL program. | This is an example of how to add and use the MSL command-line parser ( '''[[MSL Objects:OptionParser|OptionParser object]]''' ). This tutorial will also discuss the common conventions used when using OptionParser to write MSL programs. It is good to follow these conventions so that most MSL developers can easily read and help fix the option parsing code of any MSL program. | ||
− | + | ||
[http://mslib.svn.sourceforge.net/viewvc/mslib/trunk/examples/example_option_parser.cpp?view=markup Complete source of example_option_parser.cpp] | [http://mslib.svn.sourceforge.net/viewvc/mslib/trunk/examples/example_option_parser.cpp?view=markup Complete source of example_option_parser.cpp] | ||
Line 20: | Line 24: | ||
=== Program description === | === Program description === | ||
− | There are a couple of conventions for setting up a command-line parsing. One common one is to create a header file for each program (in this case example_option_parser.h), here we create an Options object which contains required and optional arguments, among other potential items. The rational for doing this, rather than placing directly in the cpp file is that it cleans up the program source file, so when people first read | + | There are a couple of conventions for setting up a command-line parsing. One common one is to create a header file for each program (in this case example_option_parser.h), here we create an Options object which contains required and optional arguments, among other potential items. The rational for doing this, rather than placing directly in the cpp file is that it cleans up the program source file, so when people first read the program source code they can get right to the main function and start understanding the program, rather than understanding all the options first. |
Latest revision as of 15:32, 5 April 2010
WARNING: Tutorial writing in progress, some errors may exist.
This is an example of how to add and use the MSL command-line parser ( OptionParser object ). This tutorial will also discuss the common conventions used when using OptionParser to write MSL programs. It is good to follow these conventions so that most MSL developers can easily read and help fix the option parsing code of any MSL program.
Complete source of example_option_parser.cpp
Complete source of example_option_parser.h
To compile
% make bin/example_option_parser
To run the program
Go to the main directory and run the command
% bin/example_option_parser
Program description
There are a couple of conventions for setting up a command-line parsing. One common one is to create a header file for each program (in this case example_option_parser.h), here we create an Options object which contains required and optional arguments, among other potential items. The rational for doing this, rather than placing directly in the cpp file is that it cleans up the program source file, so when people first read the program source code they can get right to the main function and start understanding the program, rather than understanding all the options first.
example_option_parser.h
#include <vector>
#include <string>
using namespace std;
struct Options {
// Set up options here...
Options(){
required.push_back("arg1");
required.push_back("arg2");
required.push_back("arg3");
required.push_back("flag1");
optional.push_back("option1");
}
// Storage for the vales of each arg
string arg1;
int arg2;
double arg3;
bool flag1;
string opt1;
vector<string> required;
vector<string> optional;
vector<string> defaultArgs;
};
Options setupOptions(int theArgc, char * theArgv[]);
example_option_parser.cpp
#include "OptionParser.h"
#include "release.h"
#include "example_option_parser.h"
using namespace MSL;
using namespace std;
using namespace MslTools;
int main(int argc, char *argv[]) {
Options opt = setupOptions(argc, argv);
}
Options setupOptions(int theArgc, char * theArgv[]){
// Create the options
Options opt;
// Parse the options
OptionParser OP;
OP.readArgv(theArgc, theArgv);
OP.setRequired(opt.required);
OP.setDefaultArguments(opt.defaultArgs); // the default argument is the --configfile option
if (OP.countOptions() == 0){
cout << "Usage: exampe_option_parser " << endl;
cout << endl;
cout << "\n";
cout << "arg1 ARG1\n";
cout << "arg2 ARG2\n";
cout << "arg3 ARG3\n";
cout << "flag1 TRUE\n";
cout << "# option1 OPT1\n";
cout << endl;
exit(0);
}
opt.opt1 = OP.getString("arg1");
if (OP.fail()){
cerr << "ERROR 1111 no arg1 specified."<<endl;
exit(1111);
}
opt.opt2 = OP.getInt("arg2");
if (OP.fail()){
cerr << "ERROR 1111 no arg2 specified."<<endl;
exit(1111);
}
opt.opt3 = OP.getDouble("arg3");
if (OP.fail()){
cerr << "ERROR 1111 no arg3 specified."<<endl;
exit(1111);
}
opt.flag1 = OP.getBool("flag1");
if (OP.fail()){
cerr << "WARNING 1111 no flag1 specified."<<endl;
}
opt.opt1 = OP.getString("option1");
if (OP.fail()){
opt.opt1 = "defaultOption1";
cerr << "WARNING 1111 no option1 specified taking default value: "<<opt.opt1<<endl;
}
return opt;
}