JavaScript Command Line Parsing

| | Comments (0) | TrackBacks (0)

Since I seem to deal with a lot more XML documents than I would like, using JavaScript + E4X as a command line scripting language is a godsend. Below is an example on how to build a quick and dirty command line arguments parser.

var args = {};
var params = [];

for each( var arg in arguments )
  {
  if( arg.indexOf( "-" ) == 0 )
    {
    arg = arg.substring( 1 ).split( "=" );

    args[ arg.shift() ] = arg[0] == null ? true : arg.join( "=" );
    }
  else
    params[ params.length ] = arg;
  }

Here is a real world example:

function usage()
  {
  print( "Usage: dump-queue.sh url queue user password [ -collate | -num=num | -ack | -path=... | -print | -raw | -prefetch |" );
  print( "                                               -timeout=millis | -listen | -browse | -list ]" );
  print( "" );
  print( "     -collate   - put messages in folders named after original message destination queue" );
  print( "     -num       - only retrieve num messages" );
  print( "     -ack       - acknowledge messages after retrieving safely" );
  print( "     -path      - root path to dump messages" );
  print( "     -print     - print messages to stdout" );
  print( "     -raw       - message only, leaves out headers and properties" );
  print( "     -prefetch  - enable prefetching" );
  print( "     -timeout   - how long to wait idle before stopping" );
  print( "     -listen    - stay up forever" );
  print( "     -browse    - only count the messages in the queue" );
  print( "     -list      - if browsing, return the message ids instead of the count" );
  print( "     -help      - this message" );
  print( "" );
  }

var args = {};
var params = [];

args["timeout"] = 5000;

for each( var arg in arguments )
  {
  if( arg.indexOf( "-" ) == 0 )
    {
    arg = arg.substring( 1 ).split( "=" );

    args[ arg.shift() ] = arg[0] == null ? true : arg.join( "=" );
    }
  else
    params[ params.length ] = arg;
  }

var url = params.shift();
var queueName = params.shift();
var user = params.shift();
var password = params.shift();

if( args[ "help" ] || password == null )
  {
  usage();
  System.exit( 1 );
  }
[Update: 11/8/05] copied wrong, older, code. added .join().

0 TrackBacks

Listed below are links to blogs that reference this entry: JavaScript Command Line Parsing.

TrackBack URL for this entry: http://www.manamplified.org/cgi-bin/mt-tb.cgi/282

Leave a comment