powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / CommandLine parser?
25 сообщений из 96, страница 2 из 4
CommandLine parser?
    #39739327
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatМне кажется

skyANA
Код: c#
1.
Console.WriteLine("/name parameter is set to: {0}", args[i + 1]);





тут надо заменить на

Код: c#
1.
Console.WriteLine("/name parameter is set to: {0}", args[++i]);


Можно, но не обязательно. Значение параметра не попадает же под case , получится холостая итерация цикла.
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739334
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlskyANA,

Немного офф - а это работает? Недавно натыкался на вопрос switch по строкам, там утверждали что возможно, только ести длина строки одинакова, и предлагали Substring(1,3)
Работает и с короткими версиями ключей.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public static class CommandLineArgumentKey
{
    public const string B = "/b";
    public const string Bar = "/bar";
    public const string F = "/f";
    public const string Foo = "/foo";
    public const string N = "/n";
    public const string Name = "/name";
}


Код: c#
1.
using ArgumentKey = CommandLineArgumentKey;


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
for (int i = 0; i < args.Length; i++)
{
    string arg = args[i];

    try
    {
        if (arg != null)
        {
            switch (arg)
            {
                case ArgumentKey.B:
                case ArgumentKey.Bar:
                    Console.WriteLine("/bar parameter is presented");
                    break;
                case ArgumentKey.F:
                case ArgumentKey.Foo:
                    Console.WriteLine("/foo parameter is presented");
                    break;
                case ArgumentKey.N:
                case ArgumentKey.Name:
                    Console.WriteLine("/name parameter is set to: {0}", args[i + 1]);
                    break;
            }
        }
    }
    catch (FormatException)
    {
        throw new ArgumentException("Input parameter is not in a correct format.", arg);
    }
    catch (IndexOutOfRangeException)
    {
        throw new ArgumentNullException(arg, "Required input parameter is missing.");
    }
}
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739336
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныskyANAИ что?
Да нет, ничего, я, чесслово, не против, если случай настолько простой, что это будет работать.У ТС проде простой.
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739340
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСон Веры Павловныпропущено...

Да нет, ничего, я, чесслово, не против, если случай настолько простой, что это будет работать.У ТС проде простой.

могут быть не только флаги, но значения надо передавать, например,

-s sqlserver -d database -u uid -p pwd
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739342
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kskyANAпропущено...
У ТС проде простой.

могут быть не только флаги, но значения надо передавать, например,

-s sqlserver -d database -u uid -p pwd
Офуенно сложно взять за ключем параметер.
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739347
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kskyANAпропущено...
У ТС проде простой.

могут быть не только флаги, но значения надо передавать, например,

-s sqlserver -d database -u uid -p pwd
Дык в примере "/name" - это как раз не флаг, а значение :)

Рассмотрим конкретно Ваш случай:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static class CommandLineArgumentKey
{
    public const string S = "-s";
    public const string Server = "--server";
    public const string D = "-d";
    public const string DB = "--db";
    public const string U = "-u";
    public const string User = "--user";
    public const string P = "-p";
    public const string Password = "--password";
}


Код: c#
1.
using ArgumentKey = CommandLineArgumentKey;


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
string server, database, user, password;

for (int i = 0; i < args.Length; i++)
{
    string arg = args[i];

    try
    {
        if (arg != null)
        {
            switch (arg)
            {
                case ArgumentKey.D:
                case ArgumentKey.DB:
                    database = args[i + 1];
                    break;
                case ArgumentKey.S:
                case ArgumentKey.Server:
                    server = args[i + 1];
                    break;
                case ArgumentKey.P:
                case ArgumentKey.Password:
                    password = args[i + 1];
                    break;
                case ArgumentKey.U:
                case ArgumentKey.User:
                    user = args[i + 1];
                    break;
            }
        }
    }
    catch (FormatException)
    {
        throw new ArgumentException("Input parameter is not in a correct format.", arg);
    }
    catch (IndexOutOfRangeException)
    {
        throw new ArgumentNullException(arg, "Required input parameter is missing.");
    }
}
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739595
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA256kпропущено...


могут быть не только флаги, но значения надо передавать, например,

-s sqlserver -d database -u uid -p pwd
Дык в примере "/name" - это как раз не флаг, а значение :)

Рассмотрим конкретно Ваш случай:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static class CommandLineArgumentKey
{
    public const string S = "-s";
    public const string Server = "--server";
    public const string D = "-d";
    public const string DB = "--db";
    public const string U = "-u";
    public const string User = "--user";
    public const string P = "-p";
    public const string Password = "--password";
}


Код: c#
1.
using ArgumentKey = CommandLineArgumentKey;


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
string server, database, user, password;

for (int i = 0; i < args.Length; i++)
{
    string arg = args[i];

    try
    {
        if (arg != null)
        {
            switch (arg)
            {
                case ArgumentKey.D:
                case ArgumentKey.DB:
                    database = args[i + 1];
                    break;
                case ArgumentKey.S:
                case ArgumentKey.Server:
                    server = args[i + 1];
                    break;
                case ArgumentKey.P:
                case ArgumentKey.Password:
                    password = args[i + 1];
                    break;
                case ArgumentKey.U:
                case ArgumentKey.User:
                    user = args[i + 1];
                    break;
            }
        }
    }
    catch (FormatException)
    {
        throw new ArgumentException("Input parameter is not in a correct format.", arg);
    }
    catch (IndexOutOfRangeException)
    {
        throw new ArgumentNullException(arg, "Required input parameter is missing.");
    }
}



да, протормозил, лайкнул, потестирую.
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739596
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123256kпропущено...


могут быть не только флаги, но значения надо передавать, например,

-s sqlserver -d database -u uid -p pwd
Офуенно сложно взять за ключем параметер.

дядя Петя... (ц, фильм Серёжа, 1960) надо отметить, что твой лексикон загадочен, слово "офуенно" мне не знакомо и в словарях не нашел, что оно означает?
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739604
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kслово "офуенно" мне не знакомо

Это то же самое, что "очешуенно".
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739616
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256k,
Тебя больше должна беспокоить твоя некомпетентность совместно с гонором.
Нечасто встречается.
Плохой характер могут себе позволить умные люди.
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739624
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA256kпропущено...


могут быть не только флаги, но значения надо передавать, например,

-s sqlserver -d database -u uid -p pwd
Дык в примере "/name" - это как раз не флаг, а значение :)

Рассмотрим конкретно Ваш случай:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static class CommandLineArgumentKey
{
    public const string S = "-s";
    public const string Server = "--server";
    public const string D = "-d";
    public const string DB = "--db";
    public const string U = "-u";
    public const string User = "--user";
    public const string P = "-p";
    public const string Password = "--password";
}


Код: c#
1.
using ArgumentKey = CommandLineArgumentKey;


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
string server, database, user, password;

for (int i = 0; i < args.Length; i++)
{
    string arg = args[i];

    try
    {
        if (arg != null)
        {
            switch (arg)
            {
                case ArgumentKey.D:
                case ArgumentKey.DB:
                    database = args[i + 1];
                    break;
                case ArgumentKey.S:
                case ArgumentKey.Server:
                    server = args[i + 1];
                    break;
                case ArgumentKey.P:
                case ArgumentKey.Password:
                    password = args[i + 1];
                    break;
                case ArgumentKey.U:
                case ArgumentKey.User:
                    user = args[i + 1];
                    break;
            }
        }
    }
    catch (FormatException)
    {
        throw new ArgumentException("Input parameter is not in a correct format.", arg);
    }
    catch (IndexOutOfRangeException)
    {
        throw new ArgumentNullException(arg, "Required input parameter is missing.");
    }
}




кстати, в свитч попадает вся подстрока флаг + значение, например,
так сработает
-s server22

а так - нет
-sserver22
флаг просто не будет найден
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739634
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kа так - нет
-sserver22это ошибка формата с выводом хелпа юзверю
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739723
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kskyANAпропущено...

Дык в примере "/name" - это как раз не флаг, а значение :)

Рассмотрим конкретно Ваш случай:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static class CommandLineArgumentKey
{
    public const string S = "-s";
    public const string Server = "--server";
    public const string D = "-d";
    public const string DB = "--db";
    public const string U = "-u";
    public const string User = "--user";
    public const string P = "-p";
    public const string Password = "--password";
}



Код: c#
1.
using ArgumentKey = CommandLineArgumentKey;



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
string server, database, user, password;

for (int i = 0; i < args.Length; i++)
{
    string arg = args[i];

    try
    {
        if (arg != null)
        {
            switch (arg)
            {
                case ArgumentKey.D:
                case ArgumentKey.DB:
                    database = args[i + 1];
                    break;
                case ArgumentKey.S:
                case ArgumentKey.Server:
                    server = args[i + 1];
                    break;
                case ArgumentKey.P:
                case ArgumentKey.Password:
                    password = args[i + 1];
                    break;
                case ArgumentKey.U:
                case ArgumentKey.User:
                    user = args[i + 1];
                    break;
            }
        }
    }
    catch (FormatException)
    {
        throw new ArgumentException("Input parameter is not in a correct format.", arg);
    }
    catch (IndexOutOfRangeException)
    {
        throw new ArgumentNullException(arg, "Required input parameter is missing.");
    }
}





кстати, в свитч попадает вся подстрока флаг + значение, например,
так сработает
-s server22

а так - нет
-sserver22
флаг просто не будет найден
Да ладно? В самом деле?!
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739791
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256k,

Пытался:

А есть какой-нибудь универсальный способ работы с параметрами командной строки?

Забил.

Ну, в VB.Net/VB6 есть ф-ция Command(), которая достает командную строку целиком, дальше на вкус и цвет. Мне ее обычно достаточно.
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739805
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,
Целиком строка это склеить массив же.
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739833
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
public const - делать не хорошо, используйте public static readonly.
лучше используйте const с модификатором private.
почему, уже обсуждали на этом сервер
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739834
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*форуме
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739839
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

а error "A constant value is expected" как победишь?
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739854
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

с этим значит не сталкивался
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739862
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANARoman Mejtes,

а error "A constant value is expected" как победишь?


"if-else". Лично мне switch всегда не нравится - как-то он выглядит на мой взгляд некрасиво, плюс обычно неудобно, что скоуп кейсов не ограничен самим кейсом, если не вставить {}. Впрочем, дело вкуса. "Const" спокойно можно объявлять не только как private, а как internal - проблемы могут быть только когда они видны снаружи сборки.
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739863
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

enum, значения относительно выбранного значения должны определяться private константами в Case:
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739865
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ само по себе открытое поле\константа не гарантирует уникальности значения. То есть в классе CommandLineArgumentKey константы могут иметь одинаковое значение, а сравнение в данном случае идет по типу. + сейчас в swich можно и извернуться :)
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739879
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesskyANA,

enum, значения относительно выбранного значения должны определяться private константами в Case:
private зачем? internal достаточно
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739915
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77256k,

Пытался:

А есть какой-нибудь универсальный способ работы с параметрами командной строки?

Забил.

Ну, в VB.Net/VB6 есть ф-ция Command(), которая достает командную строку целиком, дальше на вкус и цвет. Мне ее обычно достаточно.

https://nugetmusthaves.com/Package?q=command line parser

ребят... эээх.. да пофих ))
...
Рейтинг: 0 / 0
CommandLine parser?
    #39739972
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123256k,
Тебя больше должна беспокоить твоя некомпетентность совместно с гонором.
Нечасто встречается.
Плохой характер могут себе позволить умные люди.

Дядя Петя, вы .... о чём? (фильм Серёжа, 1960)
Очешуенно
...
Рейтинг: 0 / 0
25 сообщений из 96, страница 2 из 4
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / CommandLine parser?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]