ArgumentParser - ArdaOzcan/SimpleArgParse GitHub Wiki

ArgumentParser

Constructor

prog

prog is the program name mentioned in the usage string. It is the executable name by default.

Example:

using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser(prog: "progName");
            parser.ParseArgs(args);
        }
    }
}
> wiki -h
usage: progName [-h]

Optional arguments:
  -h, --help            Show this message.

usage

Similar to prog, you can override usage with a custom string. It is usage: {prog} {optionalArgs} {positionalArgs} by default.

Example:

using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser(usage: "This is my custom usage.");
            parser.ParseArgs(args);
        }
    }
}
> wiki -h
usage: This is my custom usage.

Optional arguments:
  -h, --help            Show this message.

description

description is a string printed just after the usage in a help message. It is null by default.

Example:

using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser(description: "This is a description of this non-existent tool.");
            parser.ParseArgs(args);
        }
    }
}
> wiki -h
usage: wiki [-h]

This is a description of this non-existent tool.

Optional arguments:
  -h, --help            Show this message.

epilog

String that is printed after the whole help message. It is null by default.

Example:

using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser(epilog: "Help message ends here btw.");
            parser.ParseArgs(args);
        }
    }
}
> wiki -h
usage: wiki [-h]

Optional arguments:
  -h, --help            Show this message.

Help message ends here btw.

AddArgument

This method adds an argument with the specified properties to the argument parser.

name

Name of the argument. If this name starts with the "-" prefix then it will be an optional argument, else it will be a positional argument.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("-n");
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki -n "arda özcan"
Namespace([n, arda özcan])

longName

Longer (not necessarily) name of an optional argument, an alias. It can be used for positional arguments, it would only change the key value in the namespace.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("-n", longName: "--name");
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki --name "arda özcan"
Namespace([name, arda özcan])

action

Action of an optional argument. Check the ArgumentAction section for further information about actions and what they do.

This example show the usage of the action parameter in the AddArgument method.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("-v", action: ArgumentAction.StoreTrue);
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki -v
Namespace([v, True])

defaultValue

Default value of an optional argument if it is not supplied. Default value is null by default.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("--name", defaultValue: "admin");
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki
Namespace([name, admin])

choices

A list of strings indicating the only selectable options for an argument. An error will be thrown if the provided values is not in the list of choices.

Example:

using System;
using System.Collections.Generic;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("--level", choices: new List<string> {"low", "mid", "high"});
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki --level somethingElse
usage: wiki [-h] --level LEVEL
wiki: error: invalid choice: '--level' (choose from low, mid, high)

required

Determines is an optional argument is required to be supplied. Can be used for positional arguments too but it won't effect anything.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("--filename", required: true);
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki
usage: wiki [-h] --filename FILENAME
wiki: error: the following arguments are required: filename

help

Help string to be printed in the help message for the argument. It is empty by default.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("--filename", help: "The filename for the tool.");
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
usage: wiki [-h] --filename FILENAME

Optional arguments:
  -h, --help            Show this message.
  --filename FILENAME   The filename for the tool.

constant

Constant value for the argument. This parameter only works for arguments with StoreConst and AppendConst actions.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("--one", action: ArgumentAction.StoreConst, constant: 1);
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki --one
Namespace([one, 1])

AddSubparsers

This method adds subparsers for the parent parser. Subparsers is an object that resembles a branch split in a tree. That means you can branch into different parsers from a parent parser. This can be used for a tool that does more than one job and requires keyword commands to do them. .NET CLI can be an example since it contains a lot of different commands (subparsers) for different actions.

A basic subparsers setup would be as follows.

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            // Subparsers object is cmd.
            var cmd = parser.AddSubparsers(help: "Command to be supplied.");

            // 'run' command for the cmd subparsers.
            var runParser = cmd.AddParser("run");
            // Add an argument to the 'run' parser just like a regular one.
            runParser.AddArgument("-fn", longName: "--filename", help: "Filename of the program.");

            // 'parser' command for the cmd subparsers.
            var parseParser = cmd.AddParser("parse");
            // Add an argument to the 'parse' parser.
            parseParser.AddArgument("-o", longName:"--output", help: "Output file of the parsed json.");


            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki -h
usage: wiki [-h] {run,parse} ...

Optional arguments:
  -h, --help            Show this message.

Positional arguments:
  {run,parse}           Command to be supplied.
> wiki run -h
usage: wiki run [-h] -fn FILENAME

Optional arguments:
  -h, --help            Show this message.
  -fn FILENAME, --filename FILENAME
                        Filename of the program.
> wiki run -fn "file.bin"
Namespace([filename, file.bin])

help

Help string to be printed in the help message for the subparsers object. It is empty by default.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            var cmd = parser.AddSubparsers(help: "Command to be supplied.");

            var runParser = cmd.AddParser("run");
            runParser.AddArgument("-fn");

            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki -h
usage: wiki [-h] {run} ...

Optional arguments:
  -h, --help            Show this message.

Positional arguments:
  {run}                 Command to be supplied.

title

Shows the subparsers help message in a different section with the given name.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            var cmd = parser.AddSubparsers(title: "cmd");

            var runParser = cmd.AddParser("run");
            runParser.AddArgument("-fn");

            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
usage: wiki [-h] {run} ...

Optional arguments:
  -h, --help            Show this message.

cmd:
  {run}

dest

Adds a key to the namespace for the parser with the supplied string as value.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            var cmd = parser.AddSubparsers(dest: "cmd");

            var runParser = cmd.AddParser("run");
            runParser.AddArgument("-fn");

            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki run
Namespace([cmd, run], [fn, file.bin])

ParseArgs

This method will parse the given arguments and return a Namespace object that will allow you to access all arguments.

args

String array that has the provided arguments as elements. You can use the default args array from the Main method parameters or provide a custom array.

Note: the first element shouldn't be the program name/path.

Example:

using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("--name");
            var parsed = parser.ParseArgs(args);
            Console.WriteLine(parsed);
        }
    }
}
> wiki --name arda
Namespace([name, arda])
using System;
using ArdaOzcan.SimpleArgParse;

namespace Wiki
{
    class Program
    {
        static void Main(string[] args)
        {
            var parser = new ArgumentParser();
            parser.AddArgument("--name");
            var parsed = parser.ParseArgs(new string[] {"--name", "arda"});
            Console.WriteLine(parsed);
        }
    }
}
> wiki
Namespace([name, arda])
⚠️ **GitHub.com Fallback** ⚠️