Created
November 11, 2014 05:07
-
-
Save johnllao/f7b23d9c5f7a47539b93 to your computer and use it in GitHub Desktop.
CommandArgs.cs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class CommandArgs | |
{ | |
private StringDictionary _parameters; | |
public CommandArgs(string[] Args) | |
{ | |
_parameters = new StringDictionary(); | |
Regex Spliter = new Regex(@"^-{1,2}|^/|=|:", | |
RegexOptions.IgnoreCase | RegexOptions.Compiled); | |
Regex Remover = new Regex(@"^['""]?(.*?)['""]?$", | |
RegexOptions.IgnoreCase | RegexOptions.Compiled); | |
string parameter = null; | |
string[] parts; | |
// Valid parameters forms: | |
// {-,/,--}param{ ,=,:}((",')value(",')) | |
// Examples: | |
// -param1 value1 --param2 /param3:"Test-:-work" | |
// /param4=happy -param5 '--=nice=--' | |
foreach (string Txt in Args) | |
{ | |
// Look for new parameters (-,/ or --) and a | |
// possible enclosed value (=,:) | |
parts = Spliter.Split(Txt, 3); | |
switch (parts.Length) | |
{ | |
// Found a value (for the last parameter | |
// found (space separator)) | |
case 1: | |
if (parameter != null) | |
{ | |
if (!_parameters.ContainsKey(parameter)) | |
{ | |
parts[0] = | |
Remover.Replace(parts[0], "$1"); | |
_parameters.Add(parameter, parts[0]); | |
} | |
parameter = null; | |
} | |
// else Error: no parameter waiting for a value (skipped) | |
break; | |
// Found just a parameter | |
case 2: | |
// The last parameter is still waiting. | |
// With no value, set it to true. | |
if (parameter != null) | |
{ | |
if (!_parameters.ContainsKey(parameter)) | |
_parameters.Add(parameter, "true"); | |
} | |
parameter = parts[1]; | |
break; | |
// Parameter with enclosed value | |
case 3: | |
// The last parameter is still waiting. | |
// With no value, set it to true. | |
if (parameter != null) | |
{ | |
if (!_parameters.ContainsKey(parameter)) | |
_parameters.Add(parameter, "true"); | |
} | |
parameter = parts[1]; | |
// Remove possible enclosing characters (",') | |
if (!_parameters.ContainsKey(parameter)) | |
{ | |
parts[2] = Remover.Replace(parts[2], "$1"); | |
_parameters.Add(parameter, parts[2]); | |
} | |
parameter = null; | |
break; | |
} | |
} | |
// In case a parameter is still waiting | |
if (parameter != null) | |
{ | |
if (!_parameters.ContainsKey(parameter)) | |
_parameters.Add(parameter, "true"); | |
} | |
} | |
public string this[string param] | |
{ | |
get | |
{ | |
return (_parameters[param]); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment