Simple command line parser

I have tried 3-4 different nuget packages for command line parsing. Didn’t figure out how to use them properly. Here is a small command line parser.

Usage example

Here is how I use it.

internal class Program
{
    private static void Main(string[] args)
    {
        var parser = new SimpleCommandLineParser();
        parser.Parse(args);

        if (parser.Arguments.ContainsKey("server"))
        {
            var server = new LoadTestServer();
            server.Start(int.Parse(parser.Arguments["server"][0]));
            Console.WriteLine("Server started");
        }
        else if (parser.Arguments.ContainsKey("client"))
        {
            var client = new LoadTestClient(parser.Arguments["client"][0]);
            client.Start();
            Console.WriteLine("All enqueued");
        }
        else
        {
            Console.WriteLine("SharpMessaging.BenchmarkApp");
            Console.WriteLine(" - Check the app.config for additional configuration options");
            Console.WriteLine();
            Console.WriteLine("SharpMessaging.BenchmarkApp -server [port]");
            Console.WriteLine("SharpMessaging.BenchmarkApp -client [host:port]");
            return;
        }

        Console.WriteLine("Press ENTER to quit");
        Console.ReadLine();
    }
}

Code

And the actual code:

public class SimpleCommandLineParser
{
    public SimpleCommandLineParser()
    {
        Arguments = new Dictionary<string, string[]>();
    }

    public IDictionary<string, string[]> Arguments { get; private set; }

    public void Parse(string[] args)
    {
        var currentName = "";
        var values = new List<string>();
        foreach (var arg in args)
        {
            if (arg.StartsWith("-"))
            {
                if (currentName != "")
                    Arguments[currentName] = values.ToArray();

                values.Clear();
                currentName = arg.Substring(1);
            }
            else if (currentName == "")
                Arguments[arg] = new string[0];
            else
                values.Add(arg);
        }

        if (currentName != "")
            Arguments[currentName] = values.ToArray();
    }

    public bool Contains(string name)
    {
        return Arguments.ContainsKey(name);
    }
}

Features

The great thing is that .NET have already done an initial parse for you. You can for instance use quotes in it to get everything in the same argument:

My parser parses the following:

as

Console.WriteLine(parser.Arguments["server"][0]); //8334
Console.WriteLine(parser.Arguments["server"][1]); //arg2

While this:

can be checked as:

Console.WriteLine(parser.Arguments.ContainsKey["server"]);
Console.WriteLine(parser.Arguments.ContainsKey["verbose"]);

i.e. strings that are specified before the first dash argument (“-arg”) will be considered to be an argument by itself.

Why I never will use bitcoins

I’ve followed the development of bitcoins for a while and I’ve from the start avoided to get involved (i.e. using bitcoins). I don’t think that there is anything wrong with bitcoin in itself. It’s a real awesome innovation. However, I don’t think that bitcoin will ever work in the real world. Here is why.

Continue reading “Why I never will use bitcoins”

Blog down time

Azure and PHP 5.5 didn’t seem to get along very much.

Got a lot of this in the log suddenly (without any modifications):


[07-Feb-2014 05:15:00 America/Los_Angeles] PHP Warning: PHP Startup: Unable to load dynamic library 'D:Program Files (x86)PHPv5.5extphp_sqlsrv.dll' - The specified module could not be found.
in Unknown on line 0
[07-Feb-2014 05:15:00 America/Los_Angeles] PHP Warning: PHP Startup: Unable to load dynamic library 'D:Program Files (x86)PHPv5.5extphp_pdo_sqlsrv.dll' - The specified module could not be found.
in Unknown on line 0

I’ve reverted to PHP 5.4 in the Azure Management web. All seems to work OK. Thumbs crossed.