Environment: All
CCmdLine is a simple way to parse a command line into switches and arguments.
Ex :
Parsing command lines with the standard C string functions (strlen, strcpy, etc.) or even with the CString operators is a nightmare. But, CCmdLine makes it effortless.
CCmdLine was written for use with console apps, but can be easily used in any application which requires command-line parsing.
CCmdLine uses STL for its collection classes, so it works in MFC and non-MFC apps. If you are using this in an MFC app, the switches and arguments will be returned as CStrings. If you are using this in a non-MFC app, they will be returned as STL 'string's.
MyApp.exe -p1 text1 text2 -p2 "this is a big argument" -opt1 -55 -opt2Switches -p1 and -p2 are required.
// if this is an MFC app, uncomment this line
// #include "stdafx.h"
#include "CmdLine.h"
void main(int argc, char **argv)
{
  // our cmd line parser object
  CCmdLine cmdLine;
  // parse the command line
  // use __argc and __argv, in MFC apps
  if (cmdLine.SplitLine(argc, argv) < 1)
  {
     // no switches were given on the command line, abort
     ASSERT(0);
     exit(-1);
  }
  // test for the 'help' case
  if (cmdLine.HasSwitch("-h"))
  {
     show_help();
     exit(0);
  }
  // StringType is CString when using MFC, else STL's 'string'
  StringType p1_1, p1_2, p2_1;
  // get the required arguments
  try
  {  
     // if any of these GetArgument calls fail, 
     // we'll end up in the catch() block
     // get the first -p1 argument
     p1_1 = cmdLine.GetArgument("-p1", 0);
     // get the second -p1 argument
     p1_2 = cmdLine.GetArgument("-p1", 1);
     // get the first -p2 argument
     p2_1 = cmdLine.GetArgument("-p2", 0);
  }
  catch (...)
  {
     // one of the required arguments was missing, abort
     ASSERT(0);
     exit(-1);
  }
  // get the optional parameters
  // GetSafeArgument does not throw exceptions, and allows for 
  // the use of a default value, in case the switch is not found
  // convert to an int, default to '100'
  int iOpt1Val =    atoi( cmdLine.GetSafeArgument( "-opt1", 0, 100 ) );
  // since opt2 has no arguments, just test for the presence of
  // the '-opt2' switch
  bool bOptSwitch2 =   cmdLine.HasSwitch("-opt2");
  .... and so on....
}
Date Posted: June 16, 1999