Commandline Post Processor

Plugin was written by bri26b (Unlicensed) from CSIRO to help him process results from the commandline.

General Info

LicenseAs-is, use at your own risk
Typefree
Current version1.0

Plugin Description

Used on the command line to post process results:

private static void Main(string[] args)
{
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-AU");
    if (args.Count() == 3)
    {
        string mappingFile = args[0];
        string resultsFile = args[1];
        string outputFile = args[2];
        //Create mapping
        var mapping = new Dictionary<string, string>();
        string[] mappingLines = File.ReadAllLines(mappingFile);
        foreach (var line in mappingLines)
        {
            var trimLine = line.Trim();
            if (!String.IsNullOrEmpty(trimLine))
            {
                string[] keyValue = trimLine.Split(new[] {','});
                mapping[keyValue[0]]= keyValue[1];
            }
        }
        //Read Riversystem.commandline results file
        string[] results = File.ReadAllLines(resultsFile);
        int numDataLines = results.Count() - 1;
        //Use first line to identify relevant columns
        string[] columnNames = results[0].Split(new[] {','});
        var columnName2Idx = new Dictionary<string, int>();
        for (int i = 0; i < columnNames.Count(); i++)
        {
            if (mapping.ContainsKey(columnNames[i]))
                columnName2Idx[columnNames[i]]= i;
        }
        //Build up the list ... done this way to only traverse the results once
        var outList = new SortedDictionary<int, string>();
        for (int i = 1; i < results.Count(); i++)
        {
            string[] splittedresults = results[i].Split(new[] {','});
            int j = 0;
            DateTime dt = Convert.ToDateTime(splittedresults[0]);
            foreach (var kvp in mapping)
            {
                string result = kvp.Value + " " + dt.ToString("dd/MM/yyyy 12:mm:ss") + " " +
                                splittedresults[columnName2Idx[kvp.Key]];
                int idx = numDataLines*j + i - 1;
                outList[idx] = result;
                j++;
            }
        }
        using (var outfile = new StreamWriter(outputFile))
            for (int i = 0; i < outList.Count; i++)
                outfile.WriteLine(outList[i]);
    }
}

Source Code

Source code available in http://hg.ewater.com.au/sourceplugin.commandlinepostprocessor