¿La mejor manera de analizar argumentos de línea de comando en C#? [cerrado]
Al crear aplicaciones de consola que toman parámetros, puede utilizar los argumentos pasados a Main(string[] args)
.
En el pasado, simplemente indexé/recorrí esa matriz y realicé algunas expresiones regulares para extraer los valores. Sin embargo, cuando los comandos se vuelven más complicados, el análisis puede volverse bastante feo.
Entonces estoy interesado en:
- Bibliotecas que usas
- Patrones que usas
Suponga que los comandos siempre cumplen con estándares comunes, como los que se responden aquí .
Recomiendo encarecidamente utilizar NDesk.Options ( Documentación ) y/o Mono.Options (misma API, diferente espacio de nombres). Un ejemplo de la documentación :
bool show_help = false;
List<string> names = new List<string> ();
int repeat = 1;
var p = new OptionSet () {
{ "n|name=", "the {NAME} of someone to greet.",
v => names.Add (v) },
{ "r|repeat=",
"the number of {TIMES} to repeat the greeting.\n" +
"this must be an integer.",
(int v) => repeat = v },
{ "v", "increase debug message verbosity",
v => { if (v != null) ++verbosity; } },
{ "h|help", "show this message and exit",
v => show_help = v != null },
};
List<string> extra;
try {
extra = p.Parse (args);
}
catch (OptionException e) {
Console.Write ("greet: ");
Console.WriteLine (e.Message);
Console.WriteLine ("Try `greet --help' for more information.");
return;
}
Realmente me gusta la biblioteca del analizador de línea de comandos ( http://commandline.codeplex.com/ ). Tiene una forma muy sencilla y elegante de configurar parámetros mediante atributos:
class Options
{
[Option("i", "input", Required = true, HelpText = "Input file to read.")]
public string InputFile { get; set; }
[Option(null, "length", HelpText = "The maximum number of bytes to process.")]
public int MaximumLenght { get; set; }
[Option("v", null, HelpText = "Print details during execution.")]
public bool Verbose { get; set; }
[HelpOption(HelpText = "Display this help screen.")]
public string GetUsage()
{
var usage = new StringBuilder();
usage.AppendLine("Quickstart Application 1.0");
usage.AppendLine("Read user manual for usage instructions...");
return usage.ToString();
}
}