Разбор командной строки для нескольких глаголов в одной команде - PullRequest
0 голосов
/ 18 мая 2018

Я пишу консольное приложение, в котором мы должны обновить строку множественного соединения в установленном приложении.Я использовал библиотеку " CommandLineParser " с функцией " Verb ".Мое требование - использовать одну командную строку для передачи другого значения строки подключения.

Example:
 Installer.exe conn1 -sservername -uusername -ppassword conn2 -sservername -uusername -ppassword

Тогда как в «CommandLineParser» это невозможно сделать?Есть ли какая-либо другая библиотека, которую я мог бы использовать?

Я пробовал следующие пакеты:

  1. CommandLineArgumentsParser
  2. CommandLineParser
  3. CLAP

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Разве вы не можете просто проанализировать параметры командной строки с помощью простого алгоритма, как указано ниже?

class ConnectionString
{
  public string Conn { get; set; }
  public string Server { get; set; }
  public string user { get; set; }
  public string pass { get; set; }
}

class MainClass
{
  static int Main(string[] args)
  {
    // Test if input arguments were supplied:
    if (args.Length == 0)
    {
      System.Console.WriteLine("No parameters specified.");
      return 1;
    }

    List<ConnectionString> connections = new List<ConnectionString>():
        ConnectionString connec = null;
    for (int i = 0; i < args.Length; i++)
    {
      if (args[i].StartsWith("-s"))
      {
        if (connec != null)
        {
          connec.Server = args[i].Substring(2);
        }
        continue;
      }
      if (args[i].StartsWith("-u"))
      {
        if (connec != null)
        {
          connec.user = args[i].Substring(2);
        }
        continue;
      }
      if (args[i].StartsWith("-p"))
      {
        if (connec != null)
        {
          connec.pass = args[i].Substring(2);
        }
        continue;
      }
      connec = new ConnectionString();
      connec.Conn = args[i];

      connections.Add(connec);
    }

    // Do What you need to do from here

    return 0;
  }
}
0 голосов
/ 18 мая 2018

Вы можете смоделировать это с помощью NDesk.Options, хотя вам придется самостоятельно написать некоторый проверочный код.

В NDesk.Options вы можете зарегистрировать обработчик для параметра по умолчанию (""<> ").Этот обработчик будет работать для каждого соединения в вашем примере.Каждый раз, когда вы сталкиваетесь со значением для параметра по умолчанию, вы можете создать объект параметров подключения и заполнить последний, когда указаны стандартные параметры.

public class ConnectionListParser : OptionSet
{
    public class ConnectionSettings
    {
        public string Name { get; set; }
        public string Servername { get; set; }
        public string Username { get; set; }
        public string Password { get; set; }
    }

    public List<ConnectionSettings> Connections {get;} = new List<ConnectionSettings>();        

    public ConnectionListParser() {     
        Add("<>", x => {                        
            Connections.Add(new ConnectionSettings() {
                Name = x
            });                             
        });

        Add("s:", x => Connections.Last().Servername = x);
        Add("u:", x => Connections.Last().Username = x);
        Add("p:", x => Connections.Last().Password = x);
    }
}

Использование:

var opts = new ConnectionListParser();
var remain = opts.Parse("conn1 -sservername1 -uusername1 -ppassword1 conn2 -sservername2 -uusername2 -ppassword2".Split(' '));
// or opts.Parse(args) when you have actual command line arguments to parse
foreach(var c in opts.Connections) {        
    Console.WriteLine($"Connection '{c.Name}': Username={c.Username};Password={c.Password};Servername={c.Servername}");
}
...