Files
UnrealEngineUWP/Engine/Source/Programs/CSVTools/CsvStats/CommandLineTool.cs
david harvey 33288c17ec Initial general release of CSV graphing and reporting tools.
#jira UE-66046
[FYI] ben.woodhouse, josh.engebretson


#ROBOMERGE-SOURCE: CL 6172720 via CL 6173182

[CL 6178668 by david harvey in Main branch]
2019-04-30 12:24:15 -04:00

198 lines
5.6 KiB
C#

// Copyright (C) Microsoft. All rights reserved.
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Diagnostics;
namespace CSVStats
{
public class CommandLineTool
{
protected enum HostPlatform
{
Windows,
Mac,
Linux
}
protected string commandLine = "";
protected Dictionary<string, string> CommandLineArgs;
private readonly static bool bIsMac = File.Exists("/System/Library/CoreServices/SystemVersion.plist");
protected static HostPlatform Host
{
get
{
PlatformID Platform = Environment.OSVersion.Platform;
switch (Platform)
{
case PlatformID.Win32NT:
return HostPlatform.Windows;
case PlatformID.Unix:
return bIsMac? HostPlatform.Mac : HostPlatform.Linux;
case PlatformID.MacOSX:
return HostPlatform.Mac;
default:
throw new Exception("Unhandled runtime platform " + Platform);
}
}
}
protected static string MakeShortFilename(string filename)
{
int index = filename.LastIndexOf(Path.DirectorySeparatorChar);
if (index == -1)
{
return filename;
}
else
{
return filename.Substring(index + 1);
}
}
protected int GetIntArg(string key, int defaultValue)
{
string val = GetArg(key, false);
if (val != "") return Convert.ToInt32(val);
return defaultValue;
}
protected float GetFloatArg(string key, float defaultValue)
{
string val = GetArg(key, false);
if (val != "") return (float)Convert.ToDouble(val,System.Globalization.CultureInfo.InvariantCulture);
return defaultValue;
}
protected bool GetBoolArg(string key)
{
return CommandLineArgs.ContainsKey(key.ToLower());
}
protected string GetArg(string key, bool mandatory = false)
{
string lowerKey = key.ToLower();
if (CommandLineArgs.ContainsKey(lowerKey))
{
return CommandLineArgs[lowerKey];
}
else if (mandatory)
{
WriteLine("Missing parameter {0}", key);
}
return "";
}
protected void WriteLine(String message, params object[] args)
{
String formatted = String.Format(message, args);
Console.WriteLine(formatted);
// Trace.WriteLine(formatted);
}
protected string[] ReadLinesFromFile(string filename)
{
StreamReader reader = new StreamReader(filename, true);
List<string> lines = new List<string>();
// Detect unicode
string line = reader.ReadLine();
bool bIsUnicode = false;
for (int i = 0; i < line.Length - 1; i++)
{
if (line[i] == '\0')
{
bIsUnicode = true;
break;
}
}
if (bIsUnicode)
{
reader = new StreamReader(filename, Encoding.Unicode, true);
}
else
{
lines.Add(line);
}
while ((line = reader.ReadLine()) != null)
{
if (line.Trim().Length > 0)
{
lines.Add(line);
}
}
reader.Close();
return lines.ToArray();
}
protected void ReadCommandLine(string[] args)
{
commandLine = "";
foreach (string arg in args)
{
if (arg.Contains(' ') || arg.Contains('\t'))
{
commandLine += "\"" + arg + "\" ";
}
else
{
commandLine += arg + " ";
}
}
CommandLineArgs = new Dictionary<string, string>();
for (int i = 0; i < args.Length; i++)
{
string arg = args[i];
if (arg[0] == '-')
{
string val = "1";
// If there's a value, read it
if (i < args.Length - 1 && args[i + 1][0] != '-')
{
bool first = true;
for (int j = i + 1; j < args.Length; j++)
{
string str = args[j];
if (str.Length > 0 && str[0] == '-')
break;
if (first)
{
val = str;
first = false;
}
else
{
val += ";" + str;
}
}
i++;
}
string argKey = arg.Substring(1).ToLower();
if (CommandLineArgs.ContainsKey(argKey))
{
Console.Out.WriteLine("Duplicate commandline argument found for " + arg + ". Overriding value from " + CommandLineArgs[argKey] + " to " + val);
CommandLineArgs.Remove(argKey);
}
CommandLineArgs.Add(arg.Substring(1).ToLower(), val);
}
}
}
}
}