Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I obtain the named arguments from a console application in the form of a Dictionary<string,string>?

I have a console application called MyTool.exe

What is the simplest way to collect the named arguments passed to this console applicaiton and then to put them in a Dictionarty<string, string>() which will have the argument name as the key and the value as the argument?

for example:

MyTool foo=123432 bar=Alora barFoo=45.9 

I should be able to obtain a dictionary which will be:

MyArguments["foo"]=123432  MyArguments["bar"]="Alora" MyArguments["barFoo"]="45.9" 
like image 810
pencilCake Avatar asked Jul 11 '12 09:07

pencilCake


2 Answers

Use this Nuget package

  • V1.9.x - Command Line Parser Library (CodePlex - Going away soon and out of date)
  • V2+ - Command Line Parser (Ongoing support)

Takes seconds to configure and adds instant professional touch to your application.

// Define a class to receive parsed values class Options {   [Option('r', "read", Required = true,     HelpText = "Input file to be processed.")]   public string InputFile { get; set; }    [Option('v', "verbose", DefaultValue = true,     HelpText = "Prints all messages to standard output.")]   public bool Verbose { get; set; }    [ParserState]   public IParserState LastParserState { get; set; }    [HelpOption]   public string GetUsage() {     return HelpText.AutoBuild(this,       (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));   } }  // Consume them static void Main(string[] args) {   var options = new Options();   if (CommandLine.Parser.Default.ParseArguments(args, options)) {     // Values are available here     if (options.Verbose) Console.WriteLine("Filename: {0}", options.InputFile);   } } 
like image 86
Mrchief Avatar answered Sep 28 '22 05:09

Mrchief


Here's how this can be done in the most simple way:

    static void Main(string[] args)     {         var arguments = new Dictionary<string, string>();          foreach (string argument in args)         {             string[] splitted = argument.Split('=');              if (splitted.Length == 2)             {                 arguments[splitted[0]] = splitted[1];             }         }     } 

Note that:

  • Argument names are case sensitive
  • Providing the same argument name more than once does not produce an error
  • No spaces are allowed
  • One = sign must be used
like image 45
Kay Zed Avatar answered Sep 28 '22 04:09

Kay Zed